我的程序结构是一个EXE工程和一个DLL工程,用degub编译两个工程,OK,运行OK。可是当用release编译,ok,运行出错,错在调用DLL的一个export函数:
extern "C" __declspec(dllexport) signed int TestFlashStart(const unsigned int nPortCOM,
                                                           const unsigned int nCOMBaudrate,
                                                           const unsigned int nCOMType, 
                                                           const float fOverspeed,
                                                           const char* PathFileName, 
                                                           const unsigned int nProcessType,
                                                           const unsigned int nSoftwareSource,
                                                           const char* BtAddrRep,
                                                           const bool bStartupDetection,
   const char* PFCode)
更改了release的编译参数,使之可以F5调试,在调用这个函数之前一切正常,可是运行到这个函数就出现:
First-chance exception in Interface.exe (MSVCP60.DLL): 0xC0000005: Access Violation.
而且无法F11单步函数的执行,直接出错,不知道问题在哪里。
而debug模式下跟踪,没有发现问题。各位有没有类似的经历,可否劳烦分享一下经验,万分感谢!!

解决方案 »

  1.   

    请注意各个参数的正确性。Debug下会帮你进行一些初始化,而release不会。
      

  2.   

    看看你的程序,有没有某些地方判断是DEBUG版本时才做的操作,其实在RELEASE版本下也要用。比如ASSERT、_DEBUG等断言和判断语句等
      

  3.   

    参考:
    http://read.newbooks.com.cn/info/172174.html
      

  4.   

    先看出错的语句是否引起了什么指针操作出错,其次检查release和debug目录等相关用到的dll,配置文件等是否一致...exe调用的相关dll等也最好都是release版本对应release,debug 版本对应debug
      

  5.   

    内存的错误,可能DEBUG下不提示
      

  6.   

    可以查看release的map文件,定位下错误在哪个函数里面
      

  7.   

    检查一下dll的版本,尽量做到和主程序版本一致
      

  8.   

    release也可以调试的,调试看看
      

  9.   

    如何察看map文件?
    错误的函数就是这个TestFlashStart(), 断点就设置在这个函数上,可以断,然后单步执行(F11)马上出错,根本看不到执行了什么,(这些都是release模式下的debug,我改了编译参数,让编译器为release模式生成调试符号表,是不是release模式下看到的不全是正在执行的代码?)
      

  10.   

    debug会自动给变了初始化,但release不会。
    保证每个变了定义后都初始化过!
      

  11.   

    请参考:
    http://www.cnblogs.com/chenhs/archive/2009/04/10/1432816.html
      

  12.   

    各位,问题发现了,解决了,虽然不是以上各位给出的地方出问题,但是还是谢谢个位的帮助,并且希望对有同样问题的朋友有启发,见连接:
    http://www.cnblogs.com/ubunoon/archive/2008/07/25/1251147.html
      

  13.   

    引用,原贴:http://www.cnblogs.com/ubunoon/archive/2008/07/25/1251147.html在编写自己的dll程序的时候,先开始在调用dll的exe上出现(AVIDLL.DLL): 0xC0000005: Access Violation,不是很明白,为什么会出现这个问题。在内部进行调试的时候发现,是调用了new操作符的缘故。很不理解,在dll中调用new操作符会出现这么一个问题,网络上搜索,在微软msdn论坛(具体地址:http://forums.msdn.microsoft.com/zh-CN/vclanguage/thread/951a04be-6b52-4617-b396-9c35e3755759/)上搜索到相关问题。于是按照说明,将dll的生成方式修改为"共享mfc方式"         project properties -> general -> Project Defaults->Use of MFC
             To set the properties "Use MFC In A Shared DLL " 另外,在网上也发现另外一篇,console方面的, 解决办法:使用c   runtime   library的动态链接版本(在你的console工程中设置忽略所有的默认链接库,然后链接到msvcrt.lib就可以了)(具体地址:http://www.poptool.net/software/p606/A60674501.shtml)
    ------------------------------------------------------
    我的exe工程和DLL工程都使用“USE MFC In a static DLL”解决问题,虽然不知道为什么shared DLL在我这里还是出错
      

  14.   

    我想知道如何看release下的map文件?
    谢谢!!