在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 真是够强大的,啥都给你弄好了。我还不知好歹的。。。。哈哈
因水平有限,有什么不足的问题,请各位看官不吝赐教,谢谢!