gpt4 book ai didi

c# - P/从 C# 调用 C++ template 方法

转载 作者:可可西里 更新时间:2023-11-01 18:29:35 27 4
gpt4 key购买 nike

我已经在 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 Import 类中定义。

似乎是,C# 中的泛型是托管类型,在 C++ 中具有非托管模板的体系结构是相当不同的东西。

如何在我的 C# 程序中使用模板方法?

最佳答案

C++ 编译器不会将模板函数烧录到二进制文件中。只发布专门版本。 C++ 编译器在逻辑上克隆模板定义并将 T 替换为任何需要的具体类型。

这意味着您必须创建一个专门的包装器:

void __declspec(dllexport) SwapMe(int *fisrt, int *second) { //example
{ SwapMe(first, second); }

你可以从C#调用这个,但是你不能调用模板版本。

C++ 模板和 C# 泛型的工作方式非常不同。

关于c# - P/从 C# 调用 C++ template<T> 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14084692/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com