本人做了一个dll,在头文件中做如下定义:
#define DLLEXPORT extern "C" _declspec( dllexport )    
DLLEXPORT void WINAPI OpenDlg(BOOL bOpen); 
在cpp中加入
void WINAPI OpenDlg(BOOL bOpen)
{ AFX_MANAGE_STATE(AfxGetStaticModuleState());
CDlgComm dlg;
dlg.DoModal();
}
在def文件中加入 OpenDlg @1
另建一个test工程,将它加入到同一个项目中去,设置该test项目依赖于dll项目。在testDlg.cpp中调用方法test()
CTestDlg::test()
{
    OpenDlg();
}
设置active project为test项目,运行,出现如下错误信息:
Unhandled exception in test.exe(DLL.DLL):0XC0000005 :Access Violation
程序停在如下位置:
BOOL CWnd::InitControlContainer()
{
TRY
{
if (m_pCtrlCont == NULL)
m_pCtrlCont = afxOccManager->CreateContainer(this);
}
END_TRY
}
为什么?而且我的dll用re

解决方案 »

  1.   

    而且我的dll用regsvr32.exe也不能注册。
      

  2.   

    如果我把dll项目中的dlgcomm对话框中的控件CMSComm去掉,就能正确显示,为什么?
      

  3.   

    凡是出错信息里有"Access Violation"这字眼的话都是因为跨模块修改对象引起的----没有权限。例如:EXE传一个结构指针给DLL,结构里有个CString的话,当DLL改为CString的值时就会有此类错误。只能给你一个方向,调试在个人。
      

  4.   


    "例如:EXE传一个结构指针给DLL,结构里有个CString的话,当DLL改为CString的值时就会有此类错误。"
    to icelight:真的会吗?按理说loadlibrary以后,DLL 就被映射到这个进程的地址空间了阿。
    这会儿没有VC环境,没法子试。
      

  5.   

    是不是ActiveX控间CMSComm 未被正确地注册啊
      

  6.   

    请问:这是不是DLL资源问题?怎么解决这问题呢?
      

  7.   

    to ArCoolGG(ArCoolGG):模块间共享MFC对象有时会出问题。上面说的害我花了一个上午调试。
    而共享非MFC对象时,我从未试过出问题。靠MFC。bljbljbljblj(LPTSTR)(LPCTSTR) :
    如果DLL里的对话框完全不能显示就有可能是没有切换到DLL资源。AfxSetResourceHandle(hInst);
    但楼主好象说了某些时候能显示对话框。