江湖救急:vc结构体字符数组VB.NET如何使用的问题!!

问题描述

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

时间: 2024-11-02 07:38:23

江湖救急:vc结构体字符数组VB.NET如何使用的问题!!的相关文章

[叩响C#之门]第5章 枚举、结构体和数组

枚举.结构体和数组 复杂的事物往往由几种简单的事物组成.我们前面学习了int.double等基本数据类型,现在我们学习由这些基本的数据类型构造更复杂的数据类型,以满足解决现实问题的需要.

struct-关于C语言结构体指针数组的问题

问题描述 关于C语言结构体指针数组的问题 //结构体struct student{ int iNum; char cName[16]; float fChineseScore; float fMathScore; float fEnglishScore;};typedef struct student STUDENT;//输入void InputTranscript(STUDENT MyClass[] int num){ int i; printf(""请输入学生的成绩信息:n&quo

c语言-结构体指针数组指向结构体类型数组的问题

问题描述 结构体指针数组指向结构体类型数组的问题 #include<stdio.h> #include<stdlib.h> struct student { char num; char name[10]; int grade; }; void swap(struct student *p[],int n) { int k,m,i,j; struct student *d; k=0;m=n-1; while(k<m) { j=m-1;m=0; for(i=k;i<=j;

关于c语言结构体指针数组的问题

问题描述 关于c语言结构体指针数组的问题 我有一个数组,里面每个成员都是结构体指针,我应该怎么给这个数组分配空间? 解决方案 指针变量的长度都是固定的,与你指向什么东西没关系的. 解决方案二: #include #define N 3 struct student { long int num; char name[20]; float score[3]; float aver; }; int main() { void Input(struct student stu[]); struct s

江湖救急:中文汉字字符用正则表达式怎么表示?

问题描述 江湖救急:中文汉字字符用正则表达式怎么表示? 百思不得其解,"[答案]"或"答案 :"用正则表达式怎么表示? 解决方案 正则表达式 - 中文字符的匹配 解决方案二: 如果是单纯的中文汉字,java里面用unicode中文码,那么正则表达式是:String regexStr = "[u4E00-u9FA5]"; 你如果只是需要匹配"答案"这两个中文汉字的话,可以找到这两个中文汉字的unicode分别是u7b54,u68

c c++-结构体里数组输出越界

问题描述 结构体里数组输出越界 typedef struct _base { int vec[4]; int size; void init() { size = 4; for(int i=0; i<size; i++) vec[i] = i+1; } void show() { for(int i=0; i<=size; i++) std::cout<<"vec["<<i<< "] is t"<<vec[

关于结构体指针数组的问题。。

问题描述 关于结构体指针数组的问题.. 如图,我这样定义与申请空间是否有问题,如有问题,请指出问题并帮我修改,谢谢 解决方案 #include #include using namespace std; struct? { int ? ? a; char ? ?b; float ? c; } x;//创建了一个变量x,包含三个成员 /************************************************************************......答案就在

C# 调用DELPHI 结构体指针数组出现的乱码

问题描述 delphi:TAirc=recordID:array[0..64]ofChar;MC:array[0..128]ofChar;LMAC:Single;XMAC:Single;WTNOL:Single;WTMAX:Single;WTMIN:Single;stdFWD:Single;stdAFT:Single;stdLFT:Single;stdRIT:Single;end;PAirc=^TArrAirc;functionGetAirc(varS:PAirc;aPath:PChar):In

[叩响C#之门]第5章 枚举、结构体和数组 5.2 结构体

5.2 结构体 很多相互联系的信息可以组成一个整体,比如一个学生的信息包括学号.姓名.性别.年龄等,它们紧密联系,共同描述学生的状况.在C#中我们可以把这些紧密联系变量定义成结构体(Structure).