C# 导入C++;c语言中的动态链接库# 我不理解如何呈现这一部分:Len,Car *pDATA+,它是C++编写的(没有空格)。你是想连接到C++库,还是在C中重写C++函数?通过Dllimport赋值?

C# 导入C++;c语言中的动态链接库# 我不理解如何呈现这一部分:Len,Car *pDATA+,它是C++编写的(没有空格)。你是想连接到C++库,还是在C中重写C++函数?通过Dllimport赋值?,c#,c++,dll,dllimport,C#,C++,Dll,Dllimport,短*Len,char*pData 这些变量不可能转化为C short L862_GetResponse(short hPort, short *Len, char *pData, long Timeout); 严格地说,我们需要更多的信息。例如,short*可以是数组,也可以是标量的地址。而pData背后的协议是什么。调用者是否分配长度通过Len传递的缓冲区?参数语义是in、out还是in/out?只有通过阅读文档才能知道 我来猜猜看。我假设*Len具有输入时缓冲区的长度,并且函数修改*Len

短*Len,char*pData 这些变量不可能转化为C

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);
然后,您可以这样调用函数:

[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);
我假设
数据
包含一个编码为UTF-8的字节数组。而且
Len
不包括空终止符


我在这里做了很多假设,因为问题中的信息是不完整的。请期待我的假设是错误的。请检查函数的文档。< /P>我不理解如何呈现这一部分:Len,Car *pDATA+,它是C++编写的(没有空格)。你是想连接到C++库,还是在C中重写C++函数?通过Dllimport赋值?