老板让做一个界面,后天用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; } |