创建MFC动态链接库注意事项

12 篇文章 0 订阅
4 篇文章 0 订阅

1、按照正常的流程建立MFC动态链接库工程,将已经编译调试好的CPP文件与头文件加载到该工程中,需要注意此处很关键,新添加的每个类,在类名前添加以下宏使每个类的函数可以到处到动态链接库中

AFX_EXT_CLASS

class AFX_EXT_CLASS CBasicFunc
{
}

如果不添加该宏该类中的函数无法导出到动态库中。而对于动态库中需要添加的全局变量则需要添加以下宏

AFX_EXT_DATA

export AFX_EXT_DATA bool g_bThread;
则该变量g_bThread可以导出到动态链接库中

2、如果动态库中涉及调用对话框类,并实现与对话框界面的交互则需要在实例化对话框类的时候,在其前面添加以下语句否则在交互过程中会出错

AFX_MANAGE_STATE(AfxGetStaticModuleState()); 
注意:该语句一定要添加在实例化之前,否则调用该实例的函数实现界面交互时会出现bug

同时在对话框类的头文件中要包含resource.h这个头文件,否则在调用该动态库时会出现找不到对话框的ID



在使用mfc动态dll的时候,编译出现了n个警告:warning C4273: dll 链接不一致,而链接的时候出现n个“无法解析的外部符号”的错误,直接导致了编译失败。

      解决方法:右击dll工程 -- 属性,打开属性页,展开:配置属性 -- C++ --预处理器,在预处理器定义的最后面填入:_AFXEXT,再次编译则搞定。

同时,需要注意,如果创建的DLL中包含结构体,结构体中有std::string类型的变量,在调用DLL时需要DEBUG版本调用DEBUG版本的DLL,Release版本调用Release版本的DLL,否则在调用DLL使用结构体时string类型变量会出现“读取字符串的字符时出错”,导致错误
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值