前几天把自己的gcc程序转到vc2005下编译,总结一下经验。
有几个需要考虑的问题
1,vc中要求所有cpp文件都必须#include "stdafx.h",且放在首行。当然可以disabled这个选项,但是为了编译速度,最好保留预编译头功能。
刚开始的想法是在cpp文件头部加入
#if defined (_MSC_VER)
#include "stdafx.h"
#endif
但很可惜不行,vc中会在#endif处报错。
2,vc中对dll的处理很特别,必需分别用__declspec(dllexport)和__declspec(dllimport)声明导出和导入的符号。
现在的想法是一套程序,可以不用修改在vc2005和gcc中都能顺利编译。具体做法是:
1,在需要生成dll的工程的stdafx.h中:
#if defined (_MSC_VER)
#define MY_LIB __declspec(dllexport)
// vc 的原有stdafx.h中的东西
#else
#define MY_LIB
#endif /* _MSC_VER */
2,在该工程的所有public class前加上MY_LIB声明,如
class MY_LIB A
{
// .....
}
3,在需要用到上面dll的工程的stdafx.h中:
#if defined (_MSC_VER)
#define MY_LIB __declspec(dllimport)
// vc 的原有stdafx.h中的东西
#else
#define MY_LIB
#endif /* _MSC_VER */
[ 本帖最后由 wishel 于 2008-9-5 16:50 编辑 ]

最新回复
上面这种方法比较简单易懂,功能上也基本够用了,可以作为另一种选择吧,呵呵。