C# get a string from C++ DLL

摘要:C# get a string from a C++ DLL

以前在 MSDN 上的討論串,搬到這裡做備忘。範例程式碼在此:gpDllNet.rar

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();
}

勤勞樸實