请问如何将以下VC代码转换成VB.net的

xu0923 2005-06-03 03:07:45
typedef struct _tagDEVINFO
{
BYTE bmoduletype;

char szname[11];
char szip[16];
char szmask[16];
char szgateip[16];
char szmacaddr[18];
BYTE bstaticip;
int workport;

ZNE100INFO zne100info;
CANETEINFO caneteinfo;
}DEVINFO;

int __stdcall ZNET_RecDevice(DEVINFO* pdevinfo,int *plen);



int count=5;
DEVINFO devinfo[50];
int len=50;
int getlen;

while(count--)
{
while((getlen=ZNET_RecDevice(devinfo,&len))>0)
{
for(int i=0;i<getlen;i++)
{
....
}
}
Sleep(1000);
}
在调用ZNET_RecDevice函数的时候他的参数是devinfo,devinfo上面定义的是一个数据,但是VB中怎样传递这样的函数参数,请高手将以上代码转换成VB的,感谢
...全文
138 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ninputer 2005-06-07
  • 打赏
  • 举报
回复
定义成什么,要根据你想怎么调用来定。你想传数组,就定义成数组。我已经用Marshal了,表示按指针传递该数组。
xu0923 2005-06-07
  • 打赏
  • 举报
回复
to Ninputer(装配脑袋)

Public Declare Ansi Function ZNET_RecDevice Lib "yourdll.dll" ( _
<MarshalAs(UnmanagedType.LPArray)> ByVal pdevinfo() As DEVINFO, _
ByRef plen As Integer _
) As Integer

注意,在这原来VC的定义pdevinfo() 的不是数组啊
Ninputer 2005-06-05
  • 打赏
  • 举报
回复
接下来来函数的声明就很好办了
Public Declare Ansi Function ZNET_RecDevice Lib "yourdll.dll" ( _
<MarshalAs(UnmanagedType.LPArray)> ByVal pdevinfo() As DEVINFO, _
ByRef plen As Integer _
) As Integer

'调用前初始化
Dim arr(49) As DEVINFO
Dim len As Integer = 50
ZNET_RecDevice(arr, len) '调用的语句
Ninputer 2005-06-05
  • 打赏
  • 举报
回复
给数组可以,这是我的拿手好戏
先将结构体翻译为VB:
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
Public Structure DEVINFO
Public bmoduletype As Byte
<MarshalAs(UnmanagedType.ByValTStr, sizeconst:=11)> Public szname As String
<MarshalAs(UnmanagedType.ByValTStr, sizeconst:=16)> Public szip As String
<MarshalAs(UnmanagedType.ByValTStr, sizeconst:=16)> Public szmask As String
<MarshalAs(UnmanagedType.ByValTStr, sizeconst:=16)> Public szgateip As String
<MarshalAs(UnmanagedType.ByValTStr, sizeconst:=18)> Public szmacaddr As String
Public bstaticip As Byte
Public workport As Integer

Public zne100info As ZNE100INFO
Public caneteinfo As CANETEINFO
End Structure

注意,最后两个类型ZNE100INFO和CANETEINFO的定义你没写,所以我就没翻译。要么你自己写类似我写的声明,要么你贴出来我给你,一定要把所有用到的类型都转换为VB写法为止
上面Char[]我用了String,这只用于传入参数,如果你这里的字段需要回传,那么用StringBuilder类型并且按照CharConst初始化(不会的话再问)。
lwy7758 2005-06-05
  • 打赏
  • 举报
回复
真的很佩服 Ninputer(装配脑袋)!

应该有5年以上编程经验吧!
xu0923 2005-06-03
  • 打赏
  • 举报
回复
我的确想调用VC++写的DLL,

上面的函数都是VC++中调用这个dll的示例函数
xu0923 2005-06-03
  • 打赏
  • 举报
回复
不需要100%翻译,我只要知道
int __stdcall ZNET_RecDevice(DEVINFO* pdevinfo,int *plen);
这个地方定义了这个函数,pdevinfo是按照DEVINFO指针传递的
DEVINFO devinfo[50];
这个定义了数组
getlen=ZNET_RecDevice(devinfo,&len)
这里在调用的时候给的是1个数组,但是VB中调用函数的时候不能直接给数组啊
Ninputer 2005-06-03
  • 打赏
  • 举报
回复
这段代码所表示的程序写法不适合VB,100%翻译是没有意义的。楼主想做什么直接说,是不是和C++编写的DLL互操作?
xu0923 2005-06-03
  • 打赏
  • 举报
回复
再顶
zjh135 2005-06-03
  • 打赏
  • 举报
回复
不要

转C++挺好的
xu0923 2005-06-03
  • 打赏
  • 举报
回复
没人知道?
xu0923 2005-06-03
  • 打赏
  • 举报
回复
devinfo上面定义的是一个数组,上面打错了

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧