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

标签 c# c++ templates marshalling

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

问题 - 能否在 C# 中编码(marshal) C++ 模板函数(如下所示,来自 VS)?

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

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

最佳答案

Question - Can a C++ template function (shown below from VS) be marshaled in C#?

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

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

关于c# - 从 C# 调用 C++ 模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6059838/

相关文章:

c# - 如何禁用连接池?

c# - 从数据库更新模型后, Entity Framework 4.0 模型第一继承丢失

c# - 当多个单元测试复制同一个文件时,运行所有单元测试失败

c# - 无法从 VB.Net 验证 C++ 中的签名哈希

c++ - 引用,地址,取消引用和指针的含义

c++ - Windows下编译的QT app计算错误

javascript - 哪个片段执行得更快/生成的代码行更少? (C++/JavaScript)

c++ - 无论实际实例化如何,都接受函数签名中的模板化参数

c++ - 您如何决定模板方法的值(value)与引用

c++ - 基于其他模板定义从模板类到原始类型的隐式转换