2016-03-17 93 views
0

在我的C/C++庫,我有一個功能,這樣的原型:如何在C#和未託管的C++庫之間傳遞參考指針?

long myFunction(const wchar_t*& pszOutput) 

該DLL分配的pszOutput內存,並釋放它。

如何從C#中調用此函數?

我已經嘗試了很多下面一行的變化(帶出來,用的MarshalAs,...),但在退出時myFunction的我總是得到一個崩潰:

[DllImport("mydll.dll", EntryPoint = "myFunction", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Unicode)] 
private static extern long myFunction(ref string szOutput); 

有誰知道,怎麼樣要做到這一點?

回答

1

如果您在Windows上,C++ long不是C#long,它通常是C#int。檢查C++中的sizeof(long)。如果它是4,那麼它是int

嘗試通過out IntPtr szOutput,然後使用Marshal.PtrToStringUni()和返回的IntPtr

參見例如PInvoke and char**以獲得類似的問題。

+0

關於在C++/C#中的很長時間,我只是輸入了一個「虛擬」的代碼和平,而不是真正的;-)。 Thx很多答案。我已經看到了你提到的例子,但簡單地希望,一個「更容易」的解決方案可以存在,並且如果可能的話,沒有任何返回字符串的副本。 – Fred