程序退出的时候报错,跟踪指向另外一个dll的ExitInstance(CallStack里极少的几行),好像是CString::~CString的时候,但是这个dll里面有好多CString,不知道怎么跟踪。如下:
Debug Assertion Failed!Program: XXX.exe
File:afx.inl
Line:122

解决方案 »

  1.   

    这个dll是你写的么?是有源码的还是没有源码的?
      

  2.   

    有源码,自己写的
    后来直接
    hExtendDLL=LoadLibrary("XX.dll");
    FreeLibrary(hExtendDLL); <----------在此报错,请问大哥,有没有什么方法定位一下
      

  3.   

    ExitInstance函数中有什么代码?
      

  4.   

    hExtendDLL 是否为空,XX.dll是否加载成功
      

  5.   

    hExtendDLL=LoadLibrary("XX.dll");
    if(hExtendDLL)
       FreeLibrary(hExtendDLL); 
      

  6.   


    ExitInstance 除了
    什么都没有,只是重载一下int CMyDLLApp::ExitInstance() 
    {
    // TODO: Add your specialized code here and/or call the base class

    return CWinApp::ExitInstance();
    }
      

  7.   

    在Dll中调试,看Dllmain中Process Detach是否处理什么了
      

  8.   

    直接在
    BOOL CEXEApp::InitInstance()
    {
        ::SetCurrentDirectory(::GetMainPath());
        hExtendDLL=LoadLibrary("PrintExtendDLL.dll");
        ASSERT(hExtendDLL);
        FreeLibrary(hExtendDLL); <--什么都没调用,这都报错
    }
      

  9.   

    查看PrintExtendDLL.dll的代码,尤其DLL卸载的代码
      

  10.   


    我使用的MFC Dll,
     找不到Process Detach在哪啊?在导出函数中,使用了CString作为参数,可能会有问题,但是直接加载,成功之后就释放,都有问题!!!!!!!!!!!!!!!!!!!!!
      

  11.   

    你封装的DLL里是不是有CString类型成员变量或全局变量,系统一般会给CString类型变量预先分配空间,中间如果又改动了,就可能没法释放干净
      

  12.   

    俺的猜想:你的PrintExtendDLL.dll有问题,着重查查在退出的时候
      

  13.   


    出问题后,先不要关闭出错提示对话框,直接利用VC菜单的Debug-〉break中断。
    就可以看到在出错前都调用了什么函数。
      

  14.   

    我也觉得VC 总有莫名其妙的问题,真应该用V S 了。
      

  15.   

    软件都是有BUG的。即使vs也是一样的
      

  16.   

    这样也行。不过恭喜楼主了,总算解决了。
    换VS吧,我用的VS2008,反正盗版还是不少