在WIN32 DLL中使用MFC库遇到的问题

  1. 云栖社区>
  2. 博客>
  3. 正文

在WIN32 DLL中使用MFC库遇到的问题

double2li 2014-01-01 23:08:00 浏览700
展开阅读全文

今天写了一个DLL,DLL中用到的一个类里用到的MSXML的COM组件,所以在DLL中要包含afx.h头文件,也就不可避免的要用到MFC的类库了,但在编译时出现了错误:mfcs42d.lib(dllmodul.obj) : error LNK2005:_DllMain@12 already defined in NetDriverConfig.obj,

http://topic.csdn.net/t/20010911/10/281452.html 处的贴子里找到了以下回答,试了一个原来是文件里定义的对象与mfcs42d.lib有冲突,加了命名空间后问题解决。还不知道DLL能不能使用,明天试一下再说了!

Linker   Tools   Error   LNK2005   
  symbol   already   defined   in   object   
    
  The   given   symbol,   displayed   in   its   decorated   form,   was   multiply   defined.   
    
  Tips   
    
  One   of   the   following   may   be   a   cause:     
    
  The   most   common   cause   of   this   error   is   accidentally   linking   with   both   the   single-threaded   and   multithreaded   libraries.   Ensure   that   the   application   project   file   includes   only   the   appropriate   libraries   and   that   any   third-party   libraries   have   appropriately   created   single-threaded   or   multithreaded   versions.   
    
    
  The   given   symbol   was   a   packaged   function   (created   by   compiling   with   /Gy)   and   was   included   in   more   than   one   file   but   was   changed   between   compilations.   Recompile   all   files   that   include   the   symbol.   
    
  The   given   symbol   was   defined   differently   in   two   member   objects   in   different   libraries,   and   both   member   objects   were   used.   
    
  An   absolute   was   defined   twice,   with   a   different   value   in   each   definition.     
    
  Linker   Tools   Error   LNK1169   
  one   or   more   multiply   defined   symbols   found   
    
  The   build   failed   due   to   multiple   definitions   of   one   or   more   symbols.   This   error   is   preceded   by   error   LNK2005.   
    
  The   /FORCE   or   /FORCE:MULTIPLE   option   overrides   this   error.   

 

 

-------------------------------------------------------------------------------------------------------------------------------------------------

今天又看了下发,发现在WIN32 DLL中使用MFC类库是会存在问题,原因是在MFC/src/DLLModul.cpp 文件中已经声明了DLLMain()函数,所以就不能在项目文件中再声明 DllMain(),否则就会出现如上所示的链接错误。所以在WIN32 DLL中使用MFC类库的话可以不声明DLLMain()函数,如果有操作要放在DLL加载时初始化的话就从CWinApp派生一个类,在项目文件里声明这个对象,在这个CWinApp类的InitInstance()成员函数中做初始化工作

网友评论

登录后评论
0/500
评论
double2li
+ 关注