c#-C# 引用C++的dll,在C# 如何获取结构体的句柄 作为传入参数,求高手帮忙。

问题描述

C# 引用C++的dll,在C# 如何获取结构体的句柄 作为传入参数,求高手帮忙。

C++ 结构体如下
typedef struct tagHIP
{
USHORT dhcp_enable; //DHCP使能
USHORT reserve; //保留
CHAR ip[HIP_BUF_LEN_32];// 设备IP
CHAR netmask[HIP_BUF_LEN_32];
CHAR gateway[HIP_BUF_LEN_32];
CHAR mac[HIP_MAC_LEN_20];
CHAR multi_ip[HIP_BUF_LEN_32];//多播地址
CHAR dns_addr[HIP_BUF_LEN_32];//DNS服务器
CHAR dns_addr_ext[HIP_BUF_LEN_32];//备用DNS服务器
LONG lReserve; //保留
}HIP_NETWORKE, *LPHIP_NETWORK_t;
函数接口如下
int HIP_I_GetDeviceConfig(LONG lLoginID, DWORD dwCommand,LONG lChannel, LPVOID lpOutBuffer, DWORD dwOutBufferSize, LPDWORD lpBytesReturned, int waittime);

使用如下:
DWORD dwReturn=0;
tagHIP_NETWORKETHPARAM para_network;

int i1=HIP_I_GetDeviceConfig(theApp.loginId, 3 ,0,&para_network,sizeof(tagHIP_NETWORKETHPARAM),&dwReturn,0);//获取参数

结构体及接口转成C#代码如下
public struct tagHIP
{
public ushort dhcp_enable; //DHCP使能
public ushort cmd_port;
public ushort data_port; // 数据端口
public ushort web_port; //web 端口
public ushort broad_port;
public ushort multi_port; //多播端口
public ushort rtsp_port; //RTSP端口
public ushort reserve; //保留

    [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 32, ArraySubType = UnmanagedType.I1)]
    public byte[] ip;// 设备IP

    [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 32, ArraySubType = UnmanagedType.I1)]
    public byte[] netmask;

    [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 32, ArraySubType = UnmanagedType.I1)]
    public byte[] gateway;

    [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 32, ArraySubType = UnmanagedType.I1)]
    public byte[] mac;

    [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 32, ArraySubType = UnmanagedType.I1)]
    public byte[] multi_ip;//多播地址

    [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 32, ArraySubType = UnmanagedType.I1)]
    public byte[] dns_addr;//DNS服务器

    [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 32, ArraySubType = UnmanagedType.I1)]
    public byte[] dns_addr_ext;//备用DNS服务器

    [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 4, ArraySubType = UnmanagedType.I1)]
    public byte[] bReserve;                    //保留

    public void Init()
    {
        ip = new byte[32];
        netmask = new byte[32];
        gateway = new byte[32];
        mac = new byte[32];
        multi_ip = new byte[32];
        dns_addr = new byte[32];
        dns_addr_ext = new byte[32];
        bReserve = new byte[4];
    }
}

接口
[DllImport("HIPI_Sdk.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int HIP_I_GetDeviceConfig(int lLoginID, uint dwCommand, int lChannel, IntPtr lpOutBuffer,
int dwOutBufferSize, IntPtr lpBytesReturned, int waittime);

C# 代码中如何使用HIP_I_GetDeviceConfig();这个函数,第四个参数如何才能把结构体转成句柄???
求高手解决,在下感激不尽。

解决方案

可以直接使用结构,例如

[DllImport("HIPI_Sdk.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern int HIP_I_GetDeviceConfig(int lLoginID, uint dwCommand, int lChannel, ref HIP hip,
int dwOutBufferSize, IntPtr lpBytesReturned, int waittime);
时间: 2024-08-02 04:54:05

c#-C# 引用C++的dll,在C# 如何获取结构体的句柄 作为传入参数,求高手帮忙。的相关文章

是否缺少 using 指令或程序集引用? 求高手帮忙解决

问题描述 usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Collections;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Web.UI.WebControls.WebParts;usingSystem.Web.UI.HtmlControls;usi

在C#里面调用带有回调函数和自定义结构体的DLL的例程

函数 开发环境: WinXP Pro(SP2英文版) + VS.NET 2003中文版接口库版本: CMPP2.0 API第二版(V2.6) 该例程演示了如何在C#里面调用VC6.0开发的带回调函数的API,而且回调函数的参数包含结构体,使用C#的委托和IntPtr方法实现. 由于我使用C#刚两天,这是我写的第一个C#程序,因此例程写的可能有点粗糙,但是编译和运行完全没有问题. CMPP2.0的API封装成了标准C调用的方法,提供以下三个接口,使用的时候只要有CMPPAPI.dll就可以了. #

jna java c++ dll-最近用JNA技术,实现java调用C++的DLL,如何用java模拟c++的链表结构体。

问题描述 最近用JNA技术,实现java调用C++的DLL,如何用java模拟c++的链表结构体. C++结构体 struct CUser_DataStruct { char pKKSCoding[128]; //标签点Kks编码 DWORD time; //UTC时间 WORD millisecond; //毫秒 int nDataState; //数据状态 double dValue; //数值 CUser_DataStruct* pNext; //指向下一个数据节点的指针 }; C++的入

vbnet-VB.net里面添加了引用,是dll文件,想看看具体的函数代码

问题描述 VB.net里面添加了引用,是dll文件,想看看具体的函数代码 譬如这一段代码 ,是调用相机的保存功能的, Private Sub Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Save.Click AxuEyeCam.SaveImage("") End Sub 但是我想看看它具体的函数代码是怎样的,哪位大神能帮着解决一下,先谢过了!

关于引用C++的Dll文件问题

问题描述 在C++头文件中发现typedefvoid(*FPtr)(int32Code,uint32ID,uint32Number,uint32counts);想要在VB.net中引用PublicDeclareFunctionFPtrLib"Winlib32.dll"(ByValCodeAsInteger,ByValIDAsUInteger,ByValNumberAsUInteger,ByValuint32AsUInteger)AsIntPtr但是向上面这样引用是错误的.请问有正确的应

C#引用LumiSoft.Net.dll搜索邮件,报错“00003 BAD Missing or invalid argument to SEARCH”如何解决

问题描述 C#引用LumiSoft.Net.dll搜索邮件,报错"00003BADMissingorinvalidargumenttoSEARCH"如何解决部分代码如下:IMAP_Clientclnt=newIMAP_Client();clnt.Connect(_MailServer,_MailPort,true);clnt.Login(_Username,_Password);clnt.SelectFolder("Inbox");int[]messageUIDs=

求助:我的VS2003 为什么不能引用 Newtonsoft.Json.dll 啊!求解!小妹不胜感激!

问题描述 我用的是VS2003,在BIN目录下引用了Newtonsoft.Json.dll,在CS文件里添加了usingNewtonsoft.Json;在调试时提示错误找不到类型或命名空间名称"Newtonsoft"(是否缺少using指令或程序集引用?)请问是怎么回事呢?是不是我找的Newtonsoft.Json.dll这个不能用在vs2003里呢?还是我没用对啊?如果谁有能在vs2003里用的json.dll请发我一份吧我邮箱lhbing@126.com谢谢啊 解决方案 解决方案二

编程-Yahoo UI(引用)问题,求高手指教!

问题描述 Yahoo UI(引用)问题,求高手指教! http://img.my.csdn.net/uploads/201309/02/1378129656_3660.jpg <!DOCTYPE html> new document <!--引入一个yui3的种子文件--> .hello{ background-color:red } <script type="text/javascript" src="http://yui.yahooapis

C#调用C语言结DLL 结构体不会封装,怎么在C#中对应C语言的结构体呢

问题描述 //决策树节点typedefstruct{char*RecordData[1000][100];//训练数据intRecord_Number;/*训练数据的行数*/intAttribute_Number;/*训练数据的列数*/}TrainDataNode;typedefstructDecisionTreeNode{intkeynum;charSelectedAttributeName[30];//选择的属性名charAttributeValue[30];//属性值intRecord_M