问题描述
vc下的结构体:typedefstructtagIDData{charName[32];charSex[4];charNation[6];charBorn[18];}IDData;Data_stdcallGetDataMsg();我在VB.net中:DeclareFunctionGetDataMsgLib"IDRead.DLL"()AsIDDataStructureIDCardData<VBFixedstring(32)>DimName()Asstring<VBFixedstring(4)>DimSex()Asstring<VBFixedstring(6)>DimNation()Asstring<VBFixedstring(18)>DimBorn()AsstringEndStructureDimMsgasIDDataIDData=GetDataMsg()DimNname,Nsex,Nnation,NbornasstringNname=IDData.name......我不知道我哪写错了,各位师傅给点指导!!谢谢你的一句金言,能使小弟茅塞顿开啊!!在此先谢过!!
解决方案
解决方案二:
在线等各位高手指教!!......
解决方案三:
参考如下:<VBFixedString(64),System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr,SizeConst:=64)>PublicszNameAsString
解决方案四:
不行。提示:IDData=GetDataMsg()中GetDataMsg()的值无法转换为IDData的1维数组。。等指教!!!.....//
解决方案五:
到这步就出问题了:IDData=GetDataMsg()提示:GetDataMsg()的值无法转换为IDData的1维数组。。
解决方案六:
定义如下<VBFixedString(32),System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr,SizeConst:=32)>PublicNameAsString而不是<VBFixedString(32),System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr,SizeConst:=32)>PublicName()AsString。不行把声明的贴出来看下。
解决方案七:
StructureIDCardData<VBFixedString(32),System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr,SizeConst:=32)>DimNameAsString<VBFixedString(4),System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr,SizeConst:=4)>DimSexAsString<VBFixedString(6),System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr,SizeConst:=6)>DimNationAsString<VBFixedString(18),System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr,SizeConst:=18)>DimBornAsStringEndStructure我把修改的地方贴出来了。现在程序运行提示错误为:方法的类型签名与PInvoke不兼容。
解决方案八:
jf
解决方案九:
会不会是因为VC的Char和VB.NET的String的字节大小不一样。两个不能转换啊。??????????????????请教中....
解决方案十:
GetDataMsg你怎么定义的?
解决方案十一:
你定义成BYTE数组试下:StructureIDCardData<VBFixedArray(31)>DimName()AsBytePublicSubInitialize()ReDimName(31)EndSubEndStructure
解决方案十二:
不行,没成功,还是方法的类型签名与PInvoke不兼容。回答gyc问题:GetDataMsg你怎么定义的?Data_stdcallGetDataMsg();我在VB.net中:DeclareFunctionGetDataMsgLib"IDRead.DLL"()AsIDData
解决方案十三:
这个问题到现在也没解决。大伙来帮帮俺啊!!!!
解决方案十四:
引用4楼yzcjun2005的回复:
到这步就出问题了:IDData=GetDataMsg()提示:GetDataMsg()的值无法转换为IDData的1维数组。。
解决方案十五:
能不能把GetDataMsg()返回值給拆分出來通過循環去賦值
解决方案:
楼上兄弟,能详解吗?举个例子。
解决方案:
现在的问题,我估计,可能是在VC的Char,转化到VB.net中出了问题。在vb.net到底是用:byte,还是string,还是char.郁闷中。。。
解决方案:
试下如下看行不行:StructureIDCardData<VBFixedString(32),System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr,SizeConst:=32)>DimNameAsString<VBFixedString(4),System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr,SizeConst:=4)>DimSexAsString<VBFixedString(6),System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr,SizeConst:=6)>DimNationAsString<VBFixedString(18),System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr,SizeConst:=18)>DimBornAsStringEndStructureDeclareFunctionGetDataMsgLib"IDRead.DLL"()As<MarshalAs(UnmanagedType.LPArray)>IDData
解决方案:
DeclareFunctionGetDataMsgLib"IDRead.DLL"()AsIDData这种声明我还没有用过楼主,可以试着改成ImportDLL(如果没有记错的话,不然就是DLL在前边)或者将那个社名中()去掉,()这个可能被VB理解成了数组仔细看看好像还有很多问题哦,楼主可能不小心都声明成空空的数组了DeclareFunctionGetDataMsgLib"IDRead.DLL"AsIDDataStructureIDCardData<VBFixedstring(32)>DimNameAsstring<VBFixedstring(4)>DimSexAsstring<VBFixedstring(6)>DimNationAsstring<VBFixedstring(18)>DimBornAsstringEndStructure