您的位置:首页 > 其它

MFC扩展DLL的DEF产生的问题

2006-07-10 21:47 337 查看
对于标准的MFC扩展DLL,当需要要编译成两个不同名的版本时:如,A版和U版。
其它VC程序在使用时,一般采用lib方式链接。扩展DLL导出两个不同名的lib,分别
对应不同的DLL版本(两个版本不同名MyMFCDLL.dll和MyMFCDLLU.dll)。
一般情况,采用DEF文件来进行lib和dll的对应。如下:
LIBRARY "MyMFCDLL"

LIBRARY "MyMFCDLLU"

这样呢,会造成一个麻烦,在迁移代码后,需要重新生成Lib时,因为我们只有一
个Def,所以需要手工将LIBRARY后的标识进行修改后再编译,否则总有一个版本的Lib
输出是不正确的。
别小看这个问题,很多人都会碰到这个问题,还半天找不到原因,呵呵。
(用Depends工具很容易找出问题)。

其实呢,对于MFC扩展DLL采用的是预编译指令方式的输出函数,如下:
class AFX_EXT_CLASS CKDPrint
#define AFX_EXT_CLASS AFX_CLASS_EXPORT
#define AFX_CLASS_EXPORT __declspec(dllexport)
所以,我们完全可以不用DEF文件,以避免可能的手误。

处理方式:
方法一:
去掉DEF文件,如果不存在Def文件,编译生成的Lib会自动对应当前的Link生成的
DLL名,刚好满足我们的需求。
方法二:
在LIBRARY后置空,不指定对应的DLL名,采用默认名称。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: