老板让做一个界面,后天用C、C++混合写的。我学了2天winform做个界面,然后把后天打包为dll。C++和C#的类型不匹配,让我折腾了好几天。终于今天下午搞定。期间遇到dll返回字符串为乱码。转来以后备用:
c#调用非托管dll时,数据类型的差异是引起出错的重要原因,在本例中调用dll以返回字符串,一直都是乱码
还几天不得解决,原来这样可以:
在c++ 中返回值用char*
extern "C" __declspec(dllexport) int scanRe(char* data)
{
strcpy(data,"47");
return 0;
}
在c#中接收返回值用 ref byte
[DllImport("PDAScandll.dll",CharSet=System.Runtime.InteropServices.CharSet.Auto)]
public static extern int scanRe( ref byte param2);
private void button1_Click(object sender, EventArgs e)
{
byte[] param2 = new byte[255];//新建字节数组
scanRe(ref param2[0]);//向dll函数传入参数
string s = System.Text.Encoding.GetEncoding("GB2312").GetString(param2, 0, param2.Length);
//将字节数组转换为字符串
label1.Text =s;
}