将模板类从C++库导出到 VB.NET 和 C#
Export Template Class from C++ library to VB.NET and C#
我有以下问题:我在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++代码从不使用模板类,编译器将完全忽略模板。模板类的方法也是如此。如果不使用它,则允许编译器忽略它。
底线是:为打算从其他语言使用的库使用模板代码通常不是一个好主意......
相关文章:
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 如何将 VB.Net 字符串作为字符*传递给C++dll?
- VB.NET DLL中的C++DLL函数复制
- TEA在VB.NET中的实现
- 如何使函数返回数组?用于制作在VB.NET中使用的DLL
- 反调试器技术:如何使用 VB.NET 对调试器隐藏线程?
- 如何在C 调用的VB.NET中编写回调函数
- 我可以在 vb.net Windows 窗体应用程序中使用 COLECONTROLModule 吗?
- C++ DLL 包装器 vb.net 传递字节数组的字节数组?
- 将简单的程序从C++移植到 vb.net
- 内存损坏从vb.net调用c dll
- vb.net单不等于c float
- 导入C 功能将结构的指针返回到VB.NET中
- REGDB_E_CLASSNOTREG from VB.NET to C++
- 使用来自VB.NET的参数调用C 函数
- 使用P/Invoke从MFC DLL函数中读取VB.NET中的结构化数据
- 将 C 按位语句转换为 vb.net
- C++ dll variable to vb.net exe
- 我无法读取 mft 并将 VB.net 转换为 C
- 在vb.net中调用C DLL文件