我照虎画猫,将一个对话框类放到了一个“regular dll using shared MFC DLL"中做成dll(ShowImage24Dlg.dll),然后在主程序中调用。主要声明和调用语句如下。在编译的时候没有提错。
1)如果是release版,那么什么问题提示也没有
2)如果是Debug版,那么编译通过,但是运行到调用的时候会先后弹出三个“Debug Assertion Failed”的错误框。都点击“忽略”之后却还能继续执行显示对话框。请教是什么原因,如何修改。谢谢在DLL中:
extern "C" __declspec(dllexport) void ShowImage(BYTE *pData, int width,int height)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CDlgShowImage DlgShowImage(pData, width,height);//对话框类我使用了带参数的构造函数,其中Byte* pData是new出来的一块内存的指针
AfxMessageBox("000") ;//每出现一个提示框,就会连续出来三个错误Debug Assertion Failed
AfxMessageBox("111") ; DlgShowImage.DoModal ();
}
在主程序调用:
typedef void (WINAPI * SHOWDLG)(BYTE *pData, int width,int height);
HINSTANCE hmod;
hmod = ::LoadLibrary ("ShowImage24Dlg.dll");
SHOWDLG lpproc;
lpproc = (SHOWDLG)GetProcAddress (hmod,"ShowImage");
lpproc (tempImage , rectcut.RectWidth*rectcut.xArray , rectcut.RectHeight*rectcut.yArray);对了,我的主程序中设置了所有的对话框的背景色,该DLL在DEBUG版中会继承主程序设置的背景色,而Release下不继承!!!!!

解决方案 »

  1.   

    应该没有,因为
    1)这是指向内存存放图像数据的指针,如果溢出了就不会再正确显示图像了
    2)这对话框类本来没做成DLL前,放在主程序中,运行良好的。
      

  2.   

    1. 假如你不传入BYTE *pData,看看有没有错误
    2. 是不是你AfxMessageBox("000")时,系统刷新了某个界面,而此时,还不能正确表示该界面。
     -------刷新问题
    3.通过Call Stack 察看哪个地方出错了
      

  3.   

    对,debug版本经常出这样的warning,不过没关系,不理就是,
    我也遇到过,OnPaint重画不过来
      

  4.   

    没法解决了吗?
    另外,我在主程序中设置了对所有对话框有效的背景颜色,在Debug版中能显示背景颜色,而在Release版中确不显示,还是默认的灰色背景呢?
      

  5.   

    在debug下,F5运行后,在vc框架上点击右键,上面有个call stack,他就是用来跟踪操作的。
    当出现问题时,你可以通过call stack窗口确认那里出错了。至于怎么修正么?
    1。 在出错的函数中,尽可能屏蔽更多的代码。
    2. 使用call stack可以找到出错的位置,然后确定如何修正。
      出错的地方很可能是你定义的全局变量或全局函数。先看看吧!
    我的email:[email protected]
    msn:[email protected]