在之前的开发中,我的dll和调用此dll的应用程序都是用dedug来编译的.当程序开发的差不多了,我觉得可以release了,我就先在dll项目中用release编译了dll,然后照老样子把头文件和release文件夹中的dll和lib文件拷到应用程序中.可是在应用程序中用release编译程序时,就提示错误"无法解析的外部符号",都是在应用程序中调用的dll中的函数,这是怎么回事?大家教教我啊

解决方案 »

  1.   

    在project->Setting...
    General属性页里头设置,Use MFC in Shared dll
      

  2.   

    注意变量的初始化,尤其是指针和BOOL变量一定要先初始化再使用!
      

  3.   

    我在改别人程序时也遇到过,关注ing
      

  4.   

    没用,我的应用程序中MFC是设为共享库啊,此外我的dll中没用MFC.还有可能是什么问题呢?
      

  5.   

    把报错信息贴一个出来出来:
    batchDlg.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: void __thiscall operateDB::DestroyStatisticStruct(struct statisticrecord * &)" (__imp_?DestroyStatisticStruct@operateDB@@QAEXAAPAUstatisticrecord@@@Z) ,该符号在函数 "public: virtual int __thiscall CbatchDlg::OnInitDialog(void)" (?OnInitDialog@CbatchDlg@@UAEHXZ) 中被引用
    ...
    都是这种错误,找不到我在应用程序中调用的dll函数,"operateDB::DestroyStatisticStruct(struct statisticrecord * &)"就是我的dll头文件中的函数声明.我曾经看过一个帖子,作者最后找到原因是用了debug的dll库,可是大家看我在一楼写的操作,我把dll改成release了啊.
      

  6.   

    我在dll.h中是这么干的:
    #ifdef DLLCLASSONE_EXPORTS
    #define DLLCLASSONE_API __declspec(dllexport)
    #else
    #define DLLCLASSONE_API __declspec(dllimport)
    #endifpublic:
    operateDB();
             ......
    这样没什么问题吧
      

  7.   

    在你的程序里随便哪里添上这一句:
    #pragma comment(lib,"XXX.lib") //你的lib名
    试试看
      

  8.   

    我找到问题了.debug和release是不共享项目->属性->链接中的命令行设置的,我在debug中的链接中设置添加了dll.lib,而没有在release中这样做,所以出现了找不到函数声明的问题.songtitan说得也是同一个问题.希望大家不要犯我的错误.另外,debug和release是共享工具->属性->包含文件的设置的.