在DLL里面添加了一个对话框 然后与他关联一个类 叫 C123 然后别的程序要调用这个DLL 如下:C123 *TipsDlg;
extern "C" _declspec(dllexport) void 2()
{
TipsDlg = new C123;
TipsDlg->DoModal();
}为啥我调用这个DLL 程序报错? 哪儿写错了?
extern "C" _declspec(dllexport) void 2()
{
TipsDlg = new C123;
TipsDlg->DoModal();
}为啥我调用这个DLL 程序报错? 哪儿写错了?
TipsDlg = new C123;
TipsDlg->DoModal();
new出来的要Create
再Show再者
EXE调用 DLL中的函数实现弹出对话框,对话框是DLL中的
你需要资源切换的给你一个DLL切换的类(基本MFC扩展DLL):
仿照Xtreme Toolkit中的CXTManageState做一个资源切换的类,一直在用,没用问题:
ManageStateEx.h
class CManageStateEx
{
public:
CManageStateEx();
virtual ~CManageStateEx();public:
static void SetModuleInfo(HMODULE hResource, HMODULE hInstance);private:
void Undo();
void Redo();private:
HMODULE m_hOldInstance;
HMODULE m_hOldResource;
BOOL m_bSet;private:
static HMODULE s_hInstance;
static HMODULE s_hResource;
};
//////////////////////////////////////////////////////////
ManageStateEx.cppHMODULE CManageStateEx::s_hInstance = NULL;
HMODULE CManageStateEx::s_hResource = NULL;CManageStateEx::CManageStateEx()
{
Redo();
}CManageStateEx::~CManageStateEx()
{
Undo();
m_hOldResource = NULL;
m_hOldInstance = NULL;
}void CManageStateEx::SetModuleInfo(HMODULE hResource, HMODULE hInstance)
{
s_hInstance = hInstance;
s_hResource = hResource;
}void CManageStateEx::Undo()
{
if (!m_bSet) return;
AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
pModuleState->m_hCurrentResourceHandle = m_hOldResource;
pModuleState->m_hCurrentInstanceHandle = m_hOldInstance;
m_bSet = false;
}void CManageStateEx::Redo()
{
ASSERT(s_hInstance != NULL);
ASSERT(s_hResource != NULL);
AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
m_hOldResource = pModuleState->m_hCurrentResourceHandle;
m_hOldInstance = pModuleState->m_hCurrentInstanceHandle;
pModuleState->m_hCurrentResourceHandle = s_hResource;
if (pModuleState->m_hCurrentInstanceHandle == NULL)
{
pModuleState->m_hCurrentInstanceHandle = s_hInstance;
}
m_bSet = true;
}
这个类用法:在你的扩展DLL 的DllMain函数中new CDynLinkLibrary(g_extensionDLL);语句后面加下下面一行代码:
CManageStateEx::SetModuleInfo(g_extensionDLL.hResource, g_extensionDLL.hModule);
在stdafx.h中加入如下宏定义:
#define SWITCH_TO_DLL_RESOURCE_HANDLE CManageStateEx MngStateEx;在用到资源切换的地方如要弹出对话框之前加入
SWITCH_TO_DLL_RESOURCE_HANDLE
就好了。不要再为资源切换而伤脑筋了,只要就这个类,再加上几句代码就搞定。