按照一本书上做的,它说时正则DLL(不知道英文是什么)。
ModArtDll0是DLL的名字。
Linking...
mfcs42d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in ModArtDll0.obj
mfcs42d.lib(dllmodul.obj) : error LNK2005: __pRawDllMain already defined in ModArtDll0.obj
mfcs42d.lib(dllmodul.obj) : warning LNK4006: _DllMain@12 already defined in ModArtDll0.obj; second definition ignored
mfcs42d.lib(dllmodul.obj) : warning LNK4006: __pRawDllMain already defined in ModArtDll0.obj; second definition ignored
   Creating library Debug/ModArtDll0.lib and object Debug/ModArtDll0.exp
Debug/ModArtDll0.dll : fatal error LNK1169: one or more multiply defined symbols found
“already defined in ModArtDll0.obj”是什么意思?
里面类的首标文件里还用#defin之类的语句吗,和上面的错误有关系吗?
多谢了!

解决方案 »

  1.   

    给你举个例子如果一个全局变量的定义比方说int foo = 0;在a.cpp里面出现过
    在b.cpp里面出现过那么就会出foo already defined in ***.obj的错误如果一个函数
    比方说
    int foo (void)
     {
       return 0;
     };在a.cpp里面出现过
    在b.cpp里面也出现过
    那么也会出这种错在*.cpp里面出现过还有可能是因为在a.h出现了 int foo = 0;
    而a.cpp include了a.h
    b.cpp也 include了b.h
      

  2.   

    他说你以上几个dll被重复定义了。
      

  3.   


    打错了,不是dll,是函数
      

  4.   

    把你的DllMain函数去掉,MFC已经封装了这个函数!
    另外定义全局变量的时候最好在.cpp中定义,在.h中用extern声明!
      

  5.   

    我想你在你的Dll中使用了MFC,或者你使用MFC扩展的Dll中又重新定义了DllMain入口函数,所以编译的时候会有重复定义的错误。
      

  6.   

    我是用了MFC扩展的Dll,写的时候没有接触到DLLMain。是在.h中用extern。在cpp中定义的。
    extern "C" void PASCAL EXPORT ModArtNewDrawing(CRect pRect,CObArray *poaLines);
    extern "C" void PASCAL EXPORT ModArtSerialize(CArchive &ar,CObArray *poaLines);
    extern "C" void PASCAL EXPORT ModArtDraw(CDC* pDC,CObArray *poaLines);
    extern "C" void PASCAL EXPORT ModArtClearDrawing(CObArray *poaLines);
    void NewLine(CRect pRect,CObArray *poaLines);
    函数的定义都在cpp中。
    谢谢各位了,可我没找到重复的函数。请大家帮忙了