为什么我写的动态链接库relesae版和debug版不同呢?在调用的时候,Release版的程序不能调用debug版的动态链接库,反之依然.

解决方案 »

  1.   

    当然,debug和release的函数导出位置都不同,如何能定位函数呢
      

  2.   

    Release/Debug只是编译选项不一样而已。
    当然你可以根据是否定义了_DEBUG宏来写出分别针对Release/Debug的代码。在调用的时候,Release版的程序不能调用debug版的动态链接库,反之依然.
    可能是两者的编译选项的差别造成的。
      

  3.   

    就比如Windows的dll,它不可能既有release又有debug吧?
      

  4.   

    >>>>别人是不是一下提供了两个呢?
    似乎只提供了一个,但两中编译都能调用
      

  5.   

    Release/Debug只是编译选项不一样而已。
    当然你可以根据是否定义了_DEBUG宏来写出分别针对Release/Debug的代码。在调用的时候,Release版的程序不能调用debug版的动态链接库,反之依然.
    可能是两者的编译选项的差别造成的。
    /////////////////////////////////
    恩,肯定不一样啊
    而且必须不一样啊,一样的话就没有什么好说的了
      

  6.   

    原来你说的是动态接库"Release版的程序不能调用debug版的动态链接库",我试了一下不是这样.互相调用没有问题
      

  7.   

    >>>>>>>>
    原来你说的是动态接库"Release版的程序不能调用debug版的动态链接库",我试了一下不是这样.互相调用没有问题
    >恩?那我怎么会出这个问题呢?
      

  8.   

    dll中使用的库跟调用它的程序使用的库没什么关系,所以两者不应该互相影响
    你出的错误是什么?
      

  9.   

    >>你出的错误是什么?如果不匹配(指的是debug版的应用程序没有调用debug版的dll),那么动态链接库不工作
      

  10.   

    可能我说的不是很清楚,在解释下:我自己写了个dll(也有debug版和release之分),在其他程序里调用时,如果不匹配(同上),就不能成功调用.
      

  11.   

    不工作,就是不报任何错误吗?
    如果是这种情况最好自己调试一下,看看为什么
    方法:dll设置为debug版本,在vc中运行这个dll,启动程序设置为你要用到这个dll的程序(release版本),在调用函数的入口设置断点
      

  12.   

    出错情况:
    1.debug版本的程序调用release版本的dll,程序没有反映.
    2.release版本的程序调用debug版本的dll,程序提示如下错误:  Debug assertion failed!
      Program:..\MyProjects\DllTest\DllTest.exe
      File:dbgheap.c
      Line:1044  Expression:_CrtIsValidHeapPointer(pUserData)
      For the information on how your program can cause an ....
      ......
      

  13.   

    是不是拿MFC写的?
    我用API写没这种问题。
      

  14.   

    我用MFC好像也没有这样的问题
      

  15.   

    我的debug版的程序调用release版的MFC常规dll也没有问题
      

  16.   

    出错情况:
    1.debug版本的程序调用release版本的dll,程序没有反映.
    2.release版本的程序调用debug版本的dll,程序提示如下错误:
    ....
    那你的debug版本的程序调用debug版本的dll有没有问题?
      

  17.   

    release调用release 或 debug调用debug 都没问题
    就是,交叉调用有问题
    我的dll是选的扩展的那种(MFC Extension DLL)
      

  18.   

    胡扯一句:dll里面的函数地址,好像是绝对的位移,如果debug和release编译方法不同,那么应该相同的函数对应的位移也不一样。
    是否用接口来做?
    That's all.
      

  19.   

    有一种可能是,是函数的参数压栈的方式不一样。试一下在导出函数的前面加 WINAPI限定一下试试
      

  20.   

    还有一种可能是,使用了模板类或MFC中的类做为参数了。比如 CString WINAPI GetName();
      

  21.   

    比如 CString WINAPI GetName(const CString& strCode)
      

  22.   

    你不应该试图交叉调用Release和Debug版本的模块
      

  23.   

    >>>还有一种可能是,使用了模板类或MFC中的类做为参数了。比如 CString WINAPI GetName();正如你所说,该怎么解决呢?