当前位置:  开发笔记 > 编程语言 > 正文

从dll导入显式实例化的模板类

如何解决《从dll导入显式实例化的模板类》经验,为你挑选了1个好方法。



1> dirkgently..:

完全实例化模板时 - 您有一个完整的类型.它与任何其他类型没有什么不同.您需要包含头文件B以及编译时链接lib文件或动态加载dll以链接到定义.

你读过这篇文章:http://support.microsoft.com/kb/168958?

以下是我测试(并且有效)的简要总结:


创建一个虚拟DLL项目

使用Win32控制台应用程序向导生成名为的dll头/源文件: template_export_test

添加以下内容:

文件: template_export_test.h


#ifndef EXP_STL
#define EXP_STL
#endif 

#ifdef EXP_STL
#    define DECLSPECIFIER __declspec(dllexport)
#    define EXPIMP_TEMPLATE
#else
#    define DECLSPECIFIER __declspec(dllimport)
#    define EXPIMP_TEMPLATE extern
#endif

EXPIMP_TEMPLATE template class DECLSPECIFIER CdllTest;

文件: template_export_test.cpp


template
CdllTest::CdllTest(T t)
: _t(t)
{
    std::cout << _t << ": init\n";
}

创建测试应用程序

使用该向导创建一个名为的Win32控制台应用程序: driver

编辑此项目的链接器项目设置:

添加到链接器>常规>其他库目录:路径 template_export_test.lib

添加到链接器>输入>其他依赖项: template_export_test.lib

包含template_export_test.h在主cpp文件中


#include "c:\Documents and Settings\...\template_export_test.h"
using namespace std;

int main(int argc, char** argv) {
    CdllTest c(12);
}

编译然后去!

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有