在调用飞易来C/C++ dll中有如下接口,调用该接口需要传递中文字符串InputStr。我需要将我的中文字符通过该接口传递给dll。
从网上资料查到
C++中的PBYTE对应C#中的ref byte。
PBYTE 就是 BYTE *,BYTE就是unsigned char。
char* 对应C#中的Byte[]
所以我该传递的是byte[]类的数据。
[DllImport("msdk.dll", EntryPoint = "M_KeyInputStringGBK", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern int M_KeyInputStringGBK(IntPtr m_hdl, ref byte InputStr, int InputLen);
最终代码如下:
string str = "这是测试ABC@123!""
Encoding gbk = Encoding.GetEncoding("gbk");
byte[] inputByte = gbk.GetBytes(str);
int res = Msdk.M_KeyInputStringGBK(M_Handle, ref inputByte[0], inputByte.Length);
调用成功。请注意,在调用函数时,传递的是 ref inputByte[0],也就是第一个byte的首地址。