2010-03-03 48 views
1

在我的C#代碼中,我需要從我編寫的C++ Dll中調用一個函數。函數是通用的。 所以,我應該只是導入它是這樣的:如何使用PInvoke導入函數模板?

[DllImport("myDll.dll")] 
private static extern TypeName functionName<TypeName>(int arg1, int arg2); 

這是正確的語法? 謝謝。

回答

4

這是行不通的,沒有使模板可導出的主流C++編譯器。此外,模板由C++編譯器通過類型擦除實例化,類似於Java泛型的工作方式。換句話說,具體的可調用函數必須由C++編譯器嵌入到DLL中。它們不再是通用的。

作爲替代方案,您可以使用C++/CLI語言編寫ref類。這產生了一個真正的.NET泛型類,可以被支持泛型的任何.NET語言使用。