将模板类从C++库导出到 VB.NET 和 C#

Export Template Class from C++ library to VB.NET and C#

本文关键字:VB NET C++      更新时间:2023-10-16

我有以下问题:我在C++中创建了一个DLL,其中包含如下所示的模板类定义:

 template <class T>
 class myClass {
    public:
    //! Constructor
    myClass(int size = 10);
    //! Destructor
    ~myClass();
    someAttributes ... ;
    }

我想导出它,所以我定义如下:

   template class __declspec(dllexport) myClass<double>;

因为 - 我读过 - 在视觉C++中,您无法导出模板,而只能导出其显式初始化。这样一切正常,我能够在新的视觉C++代码中导入 DLL。现在:我是否必须为我需要的每种类型(myClass、myClass 等)导出显式实例化?还是有更好的方法 - 不那么天真 - 来做到这一点?如何在 VB.NET 项目中导入模板类?有办法吗?还是我必须创建一个封送结构,然后在运行时在我的模板类中转换它?

谢谢大家!

您必须为要使用的每种类型导出模板的显式类型实例化。此外,您可能必须至少从C++代码中调用要显式使用的每个方法一次,以便将其目标代码包含在库中。

原因是,模板代码不是可以轻松编译到目标文件(或 dll)中的代码。编译器将在程序的编译时生成所需的(通常仅是必需的)代码。如果C++代码从不使用模板类,编译器将完全忽略模板。模板类的方法也是如此。如果不使用它,则允许编译器忽略它。

底线是:为打算从其他语言使用的库使用模板代码通常不是一个好主意......