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