在c#中导入C ++ Dll

时间:2014-07-10 12:31:35

标签: c# c++ dll dllimport

有一个用C ++编写的库,你必须将它导入到C#的项目中 遇到这样的问题 我无法将代码转换为C#函数

short L862_GetResponse ( short hPort, short *Len, char * pData, long Timeout );

短* Len,char * pData 将这些变量转换为C#是不可能的

1 个答案:

答案 0 :(得分:1)

short L862_GetResponse(short hPort, short *Len, char *pData, long Timeout);

严格来说,我们需要更多信息。例如,short*可以是数组,也可以是标量的地址。什么是pData背后的协议。调用者是否分配了一个长度通过Len传递的缓冲区?参数语义是in,out还是in / out?只有通过阅读文档才能知道。

我会做几个猜测。我假设*Len具有缓冲区的长度,并且该函数修改*Len以包含写入缓冲区的字符数。

p / invoke看起来像这样:

[DllImport(dllname, CallingConvention = CallingConvention.Cdecl)]
public static extern short L862_GetResponse(
    short hPort, 
    ref short Len, 
    [In, Out]
    byte[] Data, 
    int Timeout
);

然后您将调用此函数:

short Len = 256; // or some other size
byte[] Data = new byte[Len];
short retval = L862_GetResponse(hPort, ref Len, Data, Timeout);
if (retval != 0) // assume that 0 means success
    ... handle error
string str = Encoding.UTF8.GetString(byte, 0, Len);

我假设Data包含一个编码为UTF-8的字节数组。并且Len不包括空终止符。

我在这里做了一堆假设,因为问题中的信息不完整。请期待我的假设是错误的。请查看该功能的文档。