调用vc++的dll怎么返回结构体数组

问题描述

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));

时间: 2024-09-14 12:37:21

调用vc++的dll怎么返回结构体数组的相关文章

C#调用c++ dll 封送结构体数组,无法成功

问题描述 C#调用c++ dll 封送结构体数组,无法成功 c++代码: class qf { private: char *id; char *mc; float sd; int LX; }; 函数:int EntryPoint(qf *qfw); c#代码: public class qf { private string id; private string mc; private float sd; private int LX; }; c#调用: qf[] qfw = new qf[2

dll里面初始化结构体,返回应用程序指向结构体的指针,应用程序可以通过这个指针读取它的成员变量吗

问题描述 dll里面初始化结构体,返回应用程序指向结构体的指针,应用程序可以通过这个指针读取它的成员变量吗 dll里面初始化结构体,返回应用程序指向结构体的指针,应用程序可以直接通过这个指针读取它的成员变量吗? 解决方案 当然是可以的.但是更好的方式是把分配内存的工作交给调用者去做.因为这样不容易忘记释放内存.申请和释放的代码成对出现. 参考windows api里的GetWindowRect,它由调用者传入一个lpRect结构体指针,函数获取了窗口坐标,填充它. 解决方案二: 只要是在同一个

c++-怎么在一个结构体里调用本身结构体数组

问题描述 怎么在一个结构体里调用本身结构体数组 typedef struct XML_DATA{ struct XML_DATA DATA[10]; char MENU[10][256]; ezxml_t xml; char *txt; char *strAttr; char *file; };XML_DATA m_data[10]; 这样使用为什么会报错,应该怎么修改?谢谢大家帮忙看看咯. 解决方案 定义变量要使用:struct XML_DATA m_data[10];要不就要改结构体的定义,

struts2 0+dll-java web项目调用 vc++的dll文件

问题描述 java web项目调用 vc++的dll文件 我用java 的jni调用vc++写好的dll动态链接库,使用main方法测试没有问题,但是放在web项目的Action中调用就不执行,在static{ System.put.println("load dll..."); System.loadlobrary("ukeyjni"); system.out.println("end load..."); } 上面的调用前后都能打印,在调用的

c#调用C++的传结构体数组指针的问题

问题描述 C++的原型函数:CRTEXPORTCOURT_RECORD_RESCALLBACKCourtRecordGetKeyValue(COURT_PARAM_KEYkey,void*data);typedefenumCOURT_PARAM_KEY{KEY_MERGE_MAP,KEY_OUTPUT_MAP};data是根据不同的key来传入不同的结构体数组:现我用C#调用如下写法:[DllImport("CourtRecord.dll")]publicstaticexternCOU

指针-调用哪个构造函数?C++,结构体

问题描述 调用哪个构造函数?C++,结构体 struct LinkNode { T data; //数据域 LinkNode<T>*link; //链指针域 LinkNode(LinkNode<T> *ptr =NULL) {link=ptr;} LinkNode(const T&item,LinkNode<T> *ptr=NULL) { data=item; link=ptr; } }; 如果有下面代码 T value; LinkNode *desptr=fi

c-C 语言中返回结构体指针,结果出来了,但是还是出现错误,不知道为什么

问题描述 C 语言中返回结构体指针,结果出来了,但是还是出现错误,不知道为什么 解决方案 p 没有初始化,也就是没有分配空间.典型的指针错误,不初始化,指针指向哪里呢? 解决方案二: array *p = new array(); 解决方案三: array p;test(&p); 解决方案四: 当然,使用指针应该首先初始化一个空地址的,否则,很容易发生指针地址错误其次,看了一下你的程序设计,程序本身是定义了一个array的结构体变量,在主函数中却要申请一个指针变量p(它的类型是结构体),一系列操

c语言-C语言求助!!!写了一个返回结构体指针的函数,编译时总是提醒没有初始化q,但是初始化了。

问题描述 C语言求助!!!写了一个返回结构体指针的函数,编译时总是提醒没有初始化q,但是初始化了. 下面是源码下载:http://pan.baidu.com/s/1dDhplwH 程序是用C语言写的,VS2013编译. 这是其中使用结构体的定义 这是哈夫曼函数的定义 解决方案 创建的时候可以 -- ,*q = NULL; malloc 之后 memset(q, 0 , sizeof(--)): 解决方案二: 创建的时候可以 -- ,*q = NULL; malloc 之后 memset(q, 0

android jni传递结构体类型给c函数,返回结构体,怎么写啊

问题描述 android jni传递结构体类型给c函数,返回结构体,怎么写啊 android jni传递结构体类型给c函数,返回结构体,怎么写啊 c方法:OutAnalyseResultPacket* EcgMainPro(InEcgPacket* pPacKet) 参数和返回值都是结构体类型 解决方案 参考:http://blog.sina.com.cn/s/blog_414e587f0101411f.html 另外,C那里返回结构体指针不太好,因为你没有机制去释放这些内存.容易内存泄漏.除非