从 C# 调用 C++ 模板函数

LEO*_*LEO 4 c# c++ templates marshalling

我对 C# 的了解非常有限。我的目标是为我的 C# 同事提供 C++ dll API。由于遗留原因,该 dll 必须采用 C++ 语言。

问题 - C++ 模板函数(如下所示,来自 VS)可以在 C# 中封送吗?

class  __declspec(dllexport) Foo
{
public: 
    template <typename T> T* getFoo(T* fooData){return fooData;};
};
Run Code Online (Sandbox Code Playgroud)

如果没有,有什么建议吗?传递到模板函数的每个类型是否都应该有自己的函数,以便 C# 可以对其进行封送?

Kon*_*lph 5

问题 - C++ 模板函数(如下所示,来自 VS)可以在 C# 中封送吗?

不。没有从 C# 到 C++ 的兼容二进制接口。您只能从 C# 调用导出的 C 符号。

理论上,您可以在 C++ DLL 中显式实例化模板,这将使它们获得外部链接和导出符号表中的条目。但名称修改将使这些函数无法用于所有实际目的。因此,最好的方法是拥有一个调用底层 C++ 函数的中间 C 兼容层。