-4
有写在C++库,则必须将其导入到项目C# 遇到这样的问题 我不能代码转换成C#功能导入C++ DLL在C#中
short L862_GetResponse (short hPort, short *Len, char * pData, long Timeout);
短*莱恩,字符* pData所 这是不可能转化为C#这些变量
有写在C++库,则必须将其导入到项目C# 遇到这样的问题 我不能代码转换成C#功能导入C++ DLL在C#中
short L862_GetResponse (short hPort, short *Len, char * pData, long Timeout);
短*莱恩,字符* 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);
我认为Data
包含编码为UTF-byte数组8。而且Len
不包含空终止符。
我在这里做了很多假设,因为问题中的信息不完整。请期待我的假设是错误的。请检查该功能的文档。
我无法理解如何表示这部分:short * Len,char * pData – ashenemy
通常,它被写成C++(不含空格)。 – crashmstr
你想链接到一个C++库,或者用C#重写一个C++函数吗? – dsolimano