在c#中导入c++ Dll

本文关键字:c++ Dll 导入 | 更新日期: 2023-09-27 18:12:30

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

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

short *Len, char * pData将这些变量

在c#中导入c++ Dll

转换成c#是不可能的
short L862_GetResponse(short hPort, short *Len, char *pData, long Timeout);

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

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

p/调用看起来像这样:

[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不包含空终止符。

我在这里做了很多假设,因为问题中的信息是不完整的。请相信我的假设是错误的。