C++的unsigned char*与C#的数据类型关系?该如何处理
C++的unsigned char*与C#的数据类型关系?
我打算在C#中调用C++写的动态库,在数据类型转换时遇到点麻烦。
需要被调用的库函数如下,参数rlen是要传出来的字符串长度,参数databuffer是要传出来的字符串:
我把该动态库放到了C#工程目录bin\Debug目录下,对该函数做了如下声明:
具体调用如下:
运行时提示:读入或写入受保护的内存。
我把databuffer的数据类型改成stringbuilder、byte[]也不行。
------解决思路----------------------
最后一个参数用StringBuilder或者byte[],不要ref
调用前先要new StringBuilder(xxx),或者new byte[xxx]
我打算在C#中调用C++写的动态库,在数据类型转换时遇到点麻烦。
需要被调用的库函数如下,参数rlen是要传出来的字符串长度,参数databuffer是要传出来的字符串:
__int16 __stdcall IC_CpuReset_Hex(HANDLE idComDev,unsigned char *rlen, unsigned char *databuffer);
我把该动态库放到了C#工程目录bin\Debug目录下,对该函数做了如下声明:
[DllImport("dcic32.dll", EntryPoint = "IC_CpuReset_Hex", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern Int16 IC_CpuReset_Hex(int idComDev, ref byte rlen, ref string databuffer);
具体调用如下:
byte len = 0;
string m_RespBuf = "";
Int16 result = IC_CpuReset_Hex(m_hReader, ref len, ref m_RespBuf);
运行时提示:读入或写入受保护的内存。
我把databuffer的数据类型改成stringbuilder、byte[]也不行。
------解决思路----------------------
最后一个参数用StringBuilder或者byte[],不要ref
调用前先要new StringBuilder(xxx),或者new byte[xxx]