遇到过一些第三方库,用DLL发布的。DEBUG版本的APP,必须调用DEBUG版本的DLL,RELEASE 版本的APP 必须调用RELEASE版本的DLL。请问这是为什么?是不是所有DLL必须遵循这个约定?那以DLL为载体的COM会怎么样呢,谢谢

解决方案 »

  1.   

    1)这个主要是考虑到一些调试信息和使用的DLL文件的不同,因为如果用户使用DEBUG,可能为了输出一些有用的信息,
    但是,DLL使用的RELEASE,就是没有办法输出,导致比较郁闷。
    2)同样是提示的问题,如果一个是DEBUG,一个是RELEASE,可能出现,就是断点在Release中不管用,而显示的一些值也
    是不合理的值,导致调试的时候认为是错的。
      

  2.   

    也就是说,这个不是必须的?起码程序运行不会出错?
    但关键是,我遇到的这些库,如果只有DEBUG版的DLL,APP使用RELEASE版根本链接不过去。(这里使用隐式连接)。不知道是不是库提供商的DLL版本保护问题?
      

  3.   

    http://blog.csdn.net/yang79tao/archive/2007/07/03/1677647.aspx最好是这样,如果你在debug下使用release的dll,出错时将得不到错误的详细信息。
    而且,看看上面那篇文章,在跨版本的时候,可能还会出现内存泄漏。
      

  4.   

    谢谢,确实是很有用的经验。MBCS 版本和Unicode版本可能需要两个不同的DLL。但同是MBCS或UNICODE版本的DEBUG和RELEASE会怎么样呢?
    而且以DLL为载体的COM呢,从来没有见过COM发布一个RELEASE版本又发布一个DEBUG版本。
    这之间的区别在哪呢?如果忽略调试问题的话,还有没有其它问题?
      

  5.   

    vc6和之前,关系不大
    在vc8之后,混杂使用dll可能会导致错误,而且很难调试
      

  6.   

    不一定这样
    应该说,Debug是为了调试用的,因此Release调Debug Dll没有什么实际意义
    而Debug调用Release是有意义的关键是你的Lib文件,DLL要是一个版本的,要么都是Debug,要么都是Release
      

  7.   

    to ouyh12345 :
    =======在vc8之后,混杂使用dll可能会导致错误,而且很难调试
    这种错误是致命的,导致程序崩溃的错误吗?我明白DEBUG版本的DLL在APP调试时的重要性。只是看到很多说法说DLL不能混杂使用,但始终不知道这样的后果.如果按照这个说法每个发布的DLL都要发布至少2个版本。以DLL为载体的COM也要2个版本,这似乎是不合理的
    to feng1976 :
    ===========应该说,Debug是为了调试用的,因此Release调Debug   Dll没有什么实际意义 
    而Debug调用Release是有意义的 我个人同意你的说法,只是没有可靠的根据去确认==========关键是你的Lib文件,DLL要是一个版本的,要么都是Debug,要么都是Release 
    这个是什么意思?能不能详细解释一下?
      

  8.   

    lib和dll 都是Debug的;
    或者都是Release的