为什么VC中报错:不允许 dllimport 函数 的定义 ??

218201 2005-08-10 03:55:57
在VC7.1中如下代码编译报错如何处理?

BCB6下正常.

VS.NET2003中:
“CTest<T>::~CTest” : 不允许 dllimport 函数 的定义
“CTest<T>::CTest” : 不允许 dllimport 函数 的定义



//代码如下

template<class T>
class __declspec(dllimport) CTest
{
public:
CTest();
~CTest();
};

template<class T>
CTest<T>::CTest()
{
//
}

template<class T>
CTest<T>::~CTest()
{
//
}
...全文
1126 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
218201 2005-08-11
  • 打赏
  • 举报
回复
look
218201 2005-08-10
  • 打赏
  • 举报
回复
就是说像帖子中的代码中的__declspec( dllimport ),bcc是可以忽略的.

cl在非模板类的时候也能忽略,但在模板类中会报"不允许 dllimport 函数 的定义"

可能是因为VC把上面的模板处理后,就在函数的定义前加了__declspec( dllimport )

(从代码写法上自然人读不出有dllimport定义的含义;只是dllimport了声明)


这个,能不能通过配置解决.
218201 2005-08-10
  • 打赏
  • 举报
回复
可能说得不是很明白,是这样的

模板类这样子导出导入基本是不可能的.这里是相当定义了一个模板类.

上面的代码是从一个开源库里大量使用的一个型.
template<class T>
class 宏xxxx CTest
{

(不知道什么原因大量遗留着这么一种形式的宏,宏xxxx不仅仅一个有很多种,它们在某些时候代入的就条件下展开为__declspec( dllimport ),这些宏又是用另一个开源库的宏定义的)

因为这种型的代码在该库中大量存在,况且代码也不由我来控制,所以我不想更改该宏的定义.(假如改为空白应该是可以通过编译的)

因为是用CMake工具生成的VS工程文件,所以我想问问有没有编译器选项之类可以忽略这个错误.或是其他办法.
大雾 2005-08-10
  • 打赏
  • 举报
回复
模板主要是源码级复用,要在编译期进行实例化后才能使用.dll是二进制复用.

如果你的代码可以工作,那么当你使用那个模板类的时候,没有办法实例化.

你可以先实例化后再导出,也就是导出实例化的类,而不是模板类,而那样,你必须事先知道T可能是什么.
吹泡泡的小猫 2005-08-10
  • 打赏
  • 举报
回复
编译器之间还是有不兼容的地方,如果不能改代码很郁闷

为什么不能改呢?
lixiaosan 2005-08-10
  • 打赏
  • 举报
回复
#define DllImport __declspec( dllimport )

class DllImport CTest
{
public:
CTest();
~CTest();
};

看不出有什么问题
218201 2005-08-10
  • 打赏
  • 举报
回复
〉〉 vcleaner
我不能改代码


代码不是我写的,是老外写的一个库

那个__declspec(dllimport)其实是宏在一定的条件下代入的,


这个代码应该理解为定义一个模板类,而忽略__declspec(dllimport)含义
(类在代码中完整实现了麽)

但是VC给报了个错,偶只想知道怎么样才能通过编译
亿云力科技 2005-08-10
  • 打赏
  • 举报
回复
没写过类库程序,mark
老夏Max 2005-08-10
  • 打赏
  • 举报
回复
参考:
如何在Dll中导出STL类
http://www.vckbase.com/document/viewdoc/?id=1263
DentistryDoctor 2005-08-10
  • 打赏
  • 举报
回复
VC7.1不支持?

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧