[MFC] VC++动态链接库资源调用
在一个很大的项目中每个人会负责不同模块的开发,那么就需要动态链接的机制,主程序可以根据需要载入相应的模块。最近在开发一个项目模块正好学习了,关于动态库开发的一些经验分享的人并不是很多。看了许多帖子和博客很少可以做到所见即所需。本系列文章会考虑在不同平台下结合不同的开发库,基本属于入门级的。
动态链接库的调用方法
Windows平台下:
a、在动态库程序中使用如下 的宏定义,
_declspec(dllexport)//导出函数库给调用程序使用
_declspec(dllimport)//从其他动态库到了函数库供自己使用
b、在项目中添加对应的.lib或者.lib和.dll文件,这“或”涉及到调用的库是静态还是动态的。具体的细节Google,百度。
c、在程序代码中包含动态库包含的头文件,然后调用来自动态库的函数。
以上是针对最一般的没有任何其他平台相关的东西的情况。
在复杂一点的情况中,可能会用到MFC资源文件
仅使用MFC 规则DLL
在动态库中额外添加一个全局函数调用这个资源,具体代码参考:VC++动态链接库(DLL)编程深入浅出(四)
这是一个系列,如果还需要科普的可以考虑看他的前面三节。
可能产生的问题及建议:
1.关于MFC中的资源调用,需要进行模块切换afx_statemanager,afx_getmodulestate();其次就是在动态库中的界面上如Tab、Ctrl + C等快捷方式不起作用。
2.不要随意添加向cout这样的标准语句,这个可能会导致命令行的输出阻塞,具体原因还未深入研究。如有大神知晓请回复,小菜不胜感激。
3.如果在工程中的其他文件中使用了名字空间(namespace)或全局函数要注意定义与声明的匹配,如果不匹配编译和链接不会被发现的,只有在调用的时候调用程序报连接错误LNK2019,因此建议在允许的情况下使用类来导出函数。