2011年8月19日 星期五

C# get a string from C++ DLL

C++ DLL :



TCHAR g_awcMessage[] = L"Hello中文";
char g_aszMessage[] = "Hello中文";

extern "C" __declspec(dllexport) TCHAR* __stdcall GetHelloL()
{
return g_awcMessage;
}

extern "C" __declspec(dllexport) CHAR* __stdcall GetHello()
{
return g_aszMessage;
}

extern "C" __declspec(dllexport) int __stdcall GetInt()
{
return 100;
}



C# P/Invoke:

[DllImport("gpDll.dll")]
public static extern IntPtr GetHello();

[DllImport("gpDll.dll")]
public static extern IntPtr GetHelloL();

[DllImport("gpDll.dll")]
public static extern int GetInt();


private void button1_Click(object sender, EventArgs e)
{
// Not support in CF
//Marshal.PtrToStringAnsi
//Marshal.PtrToStringAuto

// Multibytes 會變成亂碼
string str = Marshal.PtrToStringUni(GetHello());

// Wide Character 顯示正常
string strL = Marshal.PtrToStringUni(GetHelloL());

int n = GetInt();
}

沒有留言: