我用vc6.0编了一个在solidworks(一个三维造型软件)下用的a1.dll文件,编译时使用的配置是WIN32 MBCS Release,在win2000系统下,在solidworks2000中调用a1.dll文件,如果不使用自编的对话框,一切正常,一旦调用自己的对话框,则出现"应用程序错误",显示"0x6bc56c1d"指令引用的"0x00000000"内存。该内存不能为"read".进行调试,出现消息框:Unhandled exception in sldwork.exe(MFC42.dll):0x00000005:Access Violation.确定后,光标出现在:6BC56C1D   mov         edx,dword ptr [eax]一行上。
  把a1.dll在win98下的solidworks上加载,运行,对话框正常显示一切正常。
为什么会在98和2000下出现不同的情况呢?
我的dll程序是在调用的lib上出现问题,还是ID定义有问题,或是有关dll其他方面的问题没注意到?

解决方案 »

  1.   

    是不是你的DLL98/2000不兼容的问题
      

  2.   

    是这样的, 在DLL中的对话框是一个资源, 在调用之前, 在你的DLL中加入
    AFX_MANAGE_STATE(AfxGetStaticModuleState());例
    // in your.dllextern "C" _decspec(dllexport) void showDlg()
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    m_dlg.DoModal();}
      

  3.   

    我曾经实验过,没有用
    我现在的代码如下:已经进行了资源的操作,还是不幸
    请高手指教,在下多谢了
    void DllExport StartDlg()
    {
    HINSTANCE CurrentResource=AfxGetResourceHandle();
    HINSTANCE NewInstance=LoadLibrary(_T("a1.dll"));
    AfxSetResourceHandle(NewInstance);
    LineDlg dlg(NULL, UserApp);
    dlg.DoModal();
             FreeLibrary(NewInstance);
    AfxSetResourceHandle(CurrentResource); }
      

  4.   

    调整一下试试:AfxSetResourceHandle(CurrentResource);
    FreeLibrary(NewInstance); 我可不是什么高手,不行别笑话呀