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名,采用默认名称。
其它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名,采用默认名称。
相关文章推荐
- MFC 扩展DLL中使用STL 问题
- MFC扩展dll里导出函数时资源切换的问题
- 解决扩展MFC DLL与主程序资源冲突问题
- VC扩展mfc dll中子对话框不能获取焦点问题
- 控制台应用程序调用MFC DLL产生的对话框,解决对话框dlg.DoModal报错问题
- MFC扩展DLL调用对话框,测试的时候报错问题的解决
- MFC扩展dll里导出函数时资源切换的问题
- 常规DLL和MFC扩展DLL(转载)
- 关于MFC DLL CWinApp::InitInstance()中创建线程的问题 易造成死锁
- MFC扩展DLL(转)
- 扩展 DLL资源冲突问题
- windows7下php5.4成功安装imageMagick,及解决php imagick常见错误问题。(phpinfo中显示不出来是因为:1.imagick软件本身、php本身、php扩展三方版本要一致,2.需要把CORE_RL_*.dll多个文件放到/php/目录下面)
- 在DLL中产生对话框的方法二(MFC Regular DLL)
- vs2008中的MFC用共享DLL和静态中使用MFC,遇到的问题
- MFC多个dll同时操作时导致资源出错问题
- 记一次进程线程dll和MFC消息循环的系列问题
- 在VC++动态链接库编程之MFC扩展DLL的操作方法
- 模块切换——MFC的规则DLL中资源使用的问题
- 如何给Win32 DLL添加MFC支持?(Dllmain重定义的问题)
- MFC在共享DLL中使用和在静态库中使用的一些问题