江湖救急:vc结构体字符数组VB.NET如何使用的问题!!
vc下的结构体:typedef struct tagIDData{
char Name[32];
char Sex[4];
char Nation[6];
char Born[18];
}IDData;
Data _stdcall GetDataMsg();
我在VB.net中:
Declare Function GetDataMsg Lib "IDRead.DLL" () As IDData
Structure IDCardData
<VBFixedstring(32)> Dim Name() As string
<VBFixedstring(4)> Dim Sex() As string
<VBFixedstring(6)> Dim Nation() As string
<VBFixedstring(18)> Dim Born() As string
End Structure
Dim Msg as IDData
IDData = GetDataMsg ()
Dim Nname ,N易做图,Nnation,Nborn as string
Nname = IDData.name
......
我不知道我哪写错了,各位师傅给点指导!!谢谢
你的一句金言,能使小弟茅塞顿开啊!!
在此先谢过!! --------------------编程问答-------------------- 在线等各位高手指教!!...... --------------------编程问答-------------------- 参考如下:
<VBFixedString(64), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=64)> Public szName As String --------------------编程问答-------------------- 不行。提示:
IDData = GetDataMsg ()
中GetDataMsg () 的值无法转换为IDData 的1维数组。。
等指教!!!.....// --------------------编程问答-------------------- 到这步就出问题了:
IDData = GetDataMsg ()
提示:GetDataMsg () 的值无法转换为IDData 的1维数组。。 --------------------编程问答-------------------- 定义如下
<VBFixedString(32), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=32)> Public Name As String
而不是
<VBFixedString(32), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=32)> Public Name() As String。
不行把声明的贴出来看下。
--------------------编程问答-------------------- Structure IDCardData
<VBFixedString(32), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=32)> Dim Name As String
<VBFixedString(4), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=4)> Dim Sex As String
<VBFixedString(6), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=6)> Dim Nation As String
<VBFixedString(18), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=18)> Dim Born As String End Structure
我把修改的地方贴出来了。
现在程序运行提示错误为:
方法的类型签名与PInvoke不兼容。 --------------------编程问答-------------------- jf
--------------------编程问答-------------------- 会不会是因为VC的Char和VB.NET的String的字节大小不一样。
两个不能转换啊。
??????????????????
请教中.... --------------------编程问答-------------------- GetDataMsg 你怎么定义的? --------------------编程问答-------------------- 你定义成BYTE数组试下:
Structure IDCardData
<VBFixedArray(31)> Dim Name() As Byte
Public Sub Initialize()
ReDim Name(31)
End Sub
End Structure --------------------编程问答-------------------- 不行,没成功,还是
方法的类型签名与PInvoke不兼容。
回答gyc 问题:GetDataMsg 你怎么定义的?
Data _stdcall GetDataMsg();
我在VB.net中:
Declare Function GetDataMsg Lib "IDRead.DLL" () As IDData --------------------编程问答-------------------- 这个问题到现在也没解决。
大伙来帮帮俺啊!!!! --------------------编程问答-------------------- --------------------编程问答-------------------- 能不能把GetDataMsg () 返回值給拆分出來
通過循環去賦值 --------------------编程问答-------------------- 楼上兄弟,能详解吗?
举个例子。 --------------------编程问答-------------------- 现在的问题,我估计,可能是在VC的Char ,转化到VB.net中出了问题。
在vb.net到底是用:byte,还是string,还是char.
郁闷中。。。 --------------------编程问答-------------------- 试下如下看行不行:
Structure IDCardData
<VBFixedString(32), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=32)> Dim Name As String
<VBFixedString(4), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=4)> Dim Sex As String
<VBFixedString(6), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=6)> Dim Nation As String
<VBFixedString(18), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=18)> Dim Born As String End Structure
Declare Function GetDataMsg Lib "IDRead.DLL" () As <MarshalAs(UnmanagedType.LPArray)> IDData
--------------------编程问答-------------------- Declare Function GetDataMsg Lib "IDRead.DLL" () As IDData
这种声明我还没有用过
楼主,可以试着改成ImportDLL (如果没有记错的话, 不然就是DLL在前边)
或者将那个社名中 () 去掉, ()这个可能被VB理解成了 数组
仔细看看好像还有很多问题哦,
楼主可能不小心 都声明成 空空的数组了
Declare Function GetDataMsg Lib "IDRead.DLL" As IDData
Structure IDCardData
<VBFixedstring(32)> Dim Name As string
<VBFixedstring(4)> Dim Sex As string
<VBFixedstring(6)> Dim Nation As string
<VBFixedstring(18)> Dim Born As string
End Structure
补充:.NET技术 , VB.NET