问题描述
c++代码:typedefstruct{intDevice_id;intDevice_ch;intDevice_total;intcar_id;charcar_Info[10];charm_status;}Deviceflag,*LPDeviceflag;#defineNETDVR_API__declspec(dllexport)NETDVR_APILONG__stdcallNET_DVR_Login(char*dwIP,unsignedshortdwPort,char*dwUseName,char*dwPassword,LPDeviceflagdwDeviceInfo,char*dwInfo);
c#代码:[StructLayout(LayoutKind.Explicit)]publicstructLPDeviceflag{[FieldOffset(32)]publicintDevice_id;[FieldOffset(32)]publicintDevice_ch;[FieldOffset(32)]publicintDevice_total;[FieldOffset(32)]publicintcar_id;[FieldOffset(80)]publicstringcar_Info;[FieldOffset(8)]publiccharm_status;}[DllImport("NetDvrRecv.dll",EntryPoint="NET_DVR_Login")]publicstaticexternintNET_DVR_Login(stringdwIP,UInt16dwPort,stringdwUseName,stringdwPassword,refLPDeviceflagdwDeviceInfo,stringdwInfo);
调用的C#代码NetDVR.LPDeviceflag[]flag=newNetDVR.LPDeviceflag[10];intiii=NetDVR.NET_DVR_Login("127.0.0.1",9001,"admin","admin",refflag[0],"0");
调用函数时没有发生任何错误,服务器端也有正确的提示,但“flag”数组没有任何返回值?
解决方案
解决方案二:
从定义上看就是一个结构体啊LPDeviceflagdwDeviceInfo我是通过下面的转换解决的,你可以试下把对应的结构体的参数改为指针,通过指针转换为相应的结构体IntPtrInfo=newIntPtr();LPDeviceflagobjinfo=(LPDeviceflag)Marshal.PtrToStructure(Info,typeof(LPDeviceflag));