VS2005编译DLL错误,error C2491: 'CMyClass::Function' : definition of dllimport function not allowed

在VS2005下写C++(MFC除外)程序的时候,我不喜欢向导生成的那几个附属文件“stdafx.h”和"stdafx.cpp"。因为如果你的代码放在另一个编译器上的时候就需要改很多东西。我现在都习惯使用了自己写的一个头文件"start.h",每次都手动引进来。

 

今天用C++制作DLL的时候也是一样,生成了一个项目名是MyTest的Empty project, 然后手动定义DLL的引入,(仅此是例子)

 

如下使用:

 

 

最后编译的时候报了2个错误,

error C2491: 'nMyTest' : definition of dllimport function not allowed

error C2491: 'fnMyTest' : definition of dllimport function not allowed

 

然后就彻底无语了,后来上MSDN,上面有一篇相关的文章。

发现预定义的时候,#define MYDLL __declspec(dllimport)这个语句起了作用。

 

那么我就在上面加上了条预定义,define MYDLL __declspec(dllexport),这样倒是能编译过去了,但是怎么看怎么像是画蛇添足。最后建了一个C++自动生成的DLL引用来做对比,终于发现:

原来是预定义宏没有设置对,我建立的项目名字是MyClass,系统就自定义生成了MyClass_EXPORTS这样一个宏,然后我手动改成MYDLL_EXPORTS就编译成功了。

 

下面给出在编译器重改变预定义宏的地方,我使用的VS2005英文版:

Project -> xx Property Pages -> C/C++ -> Preprocessor;

把Preprocessor Definitions 的属性中的向导生成的DLL预定义改成你自己定义的。

在本例中,把MyClass_EXPORTS改成MYDLL_EXPORTS。

 

总结:VS 真是够强大的,啥都给你弄好了。我还不知好歹的。。。。哈哈

 

因水平有限,有什么不足的问题,请各位看官不吝赐教,谢谢!

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值