我需要导入一个描述为
的C函数int Read(LPBYTE data, LPBYTE lengthOfData);
文档说明如下:
数据
[out]读取的数据
lengthOfData
[out]读取的数据长度
以下是使用此功能的示例:
int num = 0;
BYTE data[16] = {0};
while (num < 6)
{
int dataLen = 0;
Read(data, &dataLen);
num += dataLen;
}
如何导入此功能?
据我所知,第一个参数是一个字节数组。
我可以将其导入为:
public static extern int Read([Out] IntPtr data, [Out] byte dataLength);
或者我应该使用out
关键字,也许?
答案 0 :(得分:0)
如果功能真的如此:
int Read(LPBYTE data, LPBYTE lengthOfData);
然后正确的翻译将是:
[DllImport(..., CallingConvention = CallingConvention.Cdecl)]
static extern int Read([Out] byte[] data, out byte dataLength);
但这与您的C代码不符。 C代码甚至不会编译你。也许第二个参数实际上是int
。
要调用此函数,您需要在调用之前分配数组。
byte[] data = new byte[16];
byte dataLength;
int retval = Read(data, out dataLength);
您需要清除以下详细信息:
该函数设计不当,因为它不允许调用者指定数组的长度,从而存在缓冲区溢出的风险。