【问题标题】:How would I import a function template using PInvoke?如何使用 PInvoke 导入函数模板?
【发布时间】:2010-03-03 15:47:20
【问题描述】:
在我的 C# 代码中,我需要从我编写的 C++ Dll 中调用一个函数。该函数是通用的。
那么,我应该像这样导入它吗:
[DllImport("myDll.dll")]
private static extern TypeName functionName<TypeName>( int arg1, int arg2 );
这是正确的语法吗?
谢谢。
【问题讨论】:
标签:
c#
c++
dll
templates
pinvoke
【解决方案1】:
这行不通,没有主流 C++ 编译器可以导出模板。此外,模板由 C++ 编译器通过类型擦除来实例化,类似于 Java 泛型的工作方式。换句话说,具体的可调用函数必须由 C++ 编译器嵌入到 DLL 中。它们不再是通用的。
作为替代方案,您可以使用 C++/CLI 语言编写 ref 类。这会产生一个真正的 .NET 泛型类,任何支持泛型的 .NET 语言都可以使用它。