【发布时间】:2015-06-30 01:26:13
【问题描述】:
我有一个简单的 .exe MFC 项目和一个静态链接 MFC 的 DLL 项目。它导出以下用于创建 CPaneDialog 的函数:
extern "C" __declspec(dllexport) void init_toolbox_gui(HWND ptr) {
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CPaneDialog *_gui = new CPaneDialog;
CWnd *p = CWnd::FromHandle(ptr);
_gui->Create(_T("DialogBar"), p, TRUE, (IDD_DIALOG1),
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI,
0);
}
我从我的主 .exe 应用程序类(派生自 CWinAppEx)中调用它,如下所示:
// dll is a handle to the DLL lib
ToolboxInitFunc func = (ToolboxInitFunc)GetProcAddress(dll, "init_toolbox_gui");
func(m_pMainWnd->GetSafeHwnd());
这在void CMFCDragFrameImpl::Init(CWnd* pDraggedWnd) 中的以下调试断言中失败:
m_pDockManager = afxGlobalUtils.GetDockingManager(pDockSite);
ENSURE(m_pDockManager != NULL);
我可以给出该函数的完整代码,但它来自标准 MFC 库。
这是调用堆栈:
toolbox-3d.dll!CMFCDragFrameImpl::Init(CWnd * pDraggedWnd) Line 106 C++
toolbox-3d.dll!CPane::CreateEx(unsigned long dwStyleEx, const wchar_t * lpszClassName, unsigned long dwStyle, const tagRECT & rect, CWnd * pParentWnd, unsigned int nID, unsigned long dwControlBarStyle, CCreateContext * pContext) Line 177 C++
toolbox-3d.dll!CDockablePane::CreateEx(unsigned long dwStyleEx, const wchar_t * lpszCaption, CWnd * pParentWnd, const tagRECT & rect, int bHasGripper, unsigned int nID, unsigned long dwStyle, unsigned long dwTabbedStyle, unsigned long dwControlBarStyle, CCreateContext * pContext) Line 175 C++
toolbox-3d.dll!CDockablePane::Create(const wchar_t * lpszWindowName, CWnd * pParentWnd, CSize sizeDefault, int bHasGripper, unsigned int nID, unsigned long dwStyle, unsigned long dwTabbedStyle, unsigned long dwControlBarStyle) Line 148 C++
toolbox-3d.dll!CPaneDialog::Create(const wchar_t * lpszWindowName, CWnd * pParentWnd, int bHasGripper, const wchar_t * lpszTemplateName, unsigned int nStyle, unsigned int nID, unsigned long dwTabbedStyle, unsigned long dwControlBarStyle) Line 48 C++
toolbox-3d.dll!CPaneDialog::Create(const wchar_t * lpszWindowName, CWnd * pParentWnd, int bHasGripper, unsigned int nIDTemplate, unsigned int nStyle, unsigned int nID) Line 42 C++
toolbox-3d.dll!init_toolbox_gui(HWND__ * ptr) Line 45 C++
可能出了什么问题?
【问题讨论】: