将模板类从 C++ 库导出到 VB.NET 和 C#
Posted
技术标签:
【中文标题】将模板类从 C++ 库导出到 VB.NET 和 C#【英文标题】:Export Template Class from C++ library to VB.NET and C# 【发布时间】:2012-09-18 13:59:18 【问题描述】:我有以下问题:我用 C++ 创建了一个 DLL,其模板类定义如下:
template <class T>
class myClass
public:
//! Constructor
myClass(int size = 10);
//! Destructor
~myClass();
someAttributes ... ;
我想导出它,所以我定义如下:
template class __declspec(dllexport) myClass<double>;
因为 - 我读过 - 在 Visual C++ 中,您不能导出模板,而只能导出它们的显式初始化。 这种方式一切正常,我可以在新的 Visual C++ 代码中导入 DLL。 现在:我是否必须为我需要的每种类型(myClass、myClass 等)导出显式实例化?还是有更好的方法 - 不那么天真 - 做到这一点? 如何在 VB.NET 项目中导入我的模板类?有办法吗?还是我必须创建一个编组结构,然后在运行时将其转换到我的模板类中?
谢谢大家!
【问题讨论】:
【参考方案1】:您必须为您希望使用的每种类型导出模板的显式类型实例化。此外,您可能必须至少一次从 C++ 代码中调用要显式使用的每个方法,以便将其目标代码包含在库中。
这样做的原因是,模板代码不是很容易编译到您的目标文件(或 dll)中的代码。编译器将在您的程序编译时生成所需的(通常仅是所需的)代码。如果您的 C++ 代码从不使用模板类,编译器将完全忽略该模板。模板类的方法也是如此。如果不使用,允许编译器忽略。
底线是:对打算从其他语言使用的库使用模板代码通常不是一个好主意...
【讨论】:
谢谢!问题是我有一个类和很多方法。使用模板,我不需要为我需要使用的每种类型重写所有模板。您对其他方式有什么建议吗? 首先,您可以问问自己,您是否真的需要所有可能的类型的类实现...也许实际上您实际上只需要一种或两种类型。以上是关于将模板类从 C++ 库导出到 VB.NET 和 C#的主要内容,如果未能解决你的问题,请参考以下文章
使用 VB.Net 将 excel 中的特定列值导出到数据网格
用C语言如何写DLL动态链接库?VB.net 又如何调用其生成的DLL库?急急急!!!!在线等!!