【发布时间】:2012-12-29 18:30:44
【问题描述】:
我已经在 C++ 中定义了用于外部调用的函数:
template<typename T>
void __declspec(dllexport) SwapMe(T *fisrt, T *second)
{
std::cout << typeid(T).name() << std::endl;
T temp = *first;
*first = *second;
*second = temp;
}
我想在 C# 程序中使用它。我试过这样:
unsafe class Program
{
[DllImport("lib1.dll", EntryPoint = "SwapMe")]
static extern void SwapMe<T>(T first, T second);
...
}
但是,我收到这样的错误:
泛型方法或泛型类中的方法是内部调用、PInvoke 或在 COM 导入类中定义。
似乎,C# 中的 Generic 是托管类型,并且在 C++ 中使用非托管模板的架构与它完全不同。
如何在我的 C# 程序中使用模板方法?
【问题讨论】:
-
不可能,模板没有外部链接。您可以获得的最接近的是使用 generic 关键字的 C++/CLI 代码。
-
@HansPassant 是什么意思?请给我解释一下!我可以在 C++ 中使用一些二进制序列化(或类似的东西......)
手动准备外部链接吗?谢谢! -
意思是完全,完全,不可能,不可能。试图让它工作没有意义,它不会工作。
标签: c# c++ templates generics pinvoke