写了一个MFC规则动态链接库:
其中有一个函数如下:
extern "C"
_declspec(dllexport) void ShowProperty()
{ AfxMessageBox("Close");
CPropDialog* cpdlg=new CPropDialog(); //CPropDialog 是从Cdialog派生出来的一个类
cpdlg->DoModal();
}在测试程序中,如下调用:
void CDllDialogTestView::OnShowdialog()
{
typedef void(*LPFNDLLFUNC1)();
HINSTANCE hDLL;
LPFNDLLFUNC1 lpfnDllFunc1;
hDLL=LoadLibrary("DllDialog");
if (hDLL!=NULL) {
lpfnDllFunc1=(LPFNDLLFUNC1)::GetProcAddress(hDLL,"ShowProperty"); if (lpfnDllFunc1!=NULL) { lpfnDllFunc1();
AfxMessageBox("Success");
}
}
else
AfxMessageBox("Fail");
}问一下:为什么我的窗口弹不出来,谢谢. ps: AfxMessageBox("Close"); 已经执行了
其中有一个函数如下:
extern "C"
_declspec(dllexport) void ShowProperty()
{ AfxMessageBox("Close");
CPropDialog* cpdlg=new CPropDialog(); //CPropDialog 是从Cdialog派生出来的一个类
cpdlg->DoModal();
}在测试程序中,如下调用:
void CDllDialogTestView::OnShowdialog()
{
typedef void(*LPFNDLLFUNC1)();
HINSTANCE hDLL;
LPFNDLLFUNC1 lpfnDllFunc1;
hDLL=LoadLibrary("DllDialog");
if (hDLL!=NULL) {
lpfnDllFunc1=(LPFNDLLFUNC1)::GetProcAddress(hDLL,"ShowProperty"); if (lpfnDllFunc1!=NULL) { lpfnDllFunc1();
AfxMessageBox("Success");
}
}
else
AfxMessageBox("Fail");
}问一下:为什么我的窗口弹不出来,谢谢. ps: AfxMessageBox("Close"); 已经执行了
试试AFX_MANAGE_STATE(AfxGetModuleState())呢?
选择“New”,至此对话框已添加到DLL工程中。3、为对话框添加一新类,如:CTest,基类为CDialog。4、在MFCDLL.cpp中(因创建的工程为MFCDLL)添加接口函数:
extern "C" __declspec(dllexport) void Show()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CTest test; test.DoModal ();
}
别忘了在文件中添加: #include "Test.h"; 5、用VC新建一对话框工程,在一按钮点击事件中添加如下代码:
typedef void (WINAPI * TESTDLL)();
HINSTANCE hmod; hmod = ::LoadLibrary ("mfcdll.dll");
if(hmod==NULL)
{
AfxMessageBox("Fail");
}
TESTDLL lpproc;
lpproc = (TESTDLL)GetProcAddress (hmod,"Show");
if(lpproc!=(TESTDLL)NULL) (*lpproc)();
FreeLibrary(hmod);
6、试试看,是不是DLL中对话框显示出来了....
AFX_MANAGE_STATE(AfxGetStaticModuleState());
在将当前的资源句柄设置为Dll模块,这样就可以显示了。如果不想在dll中设置。就像你最的代码,那么在调用时设置也可以。对你原程序修改如下extern "C"
_declspec(dllexport) void ShowProperty()
{
AfxMessageBox("Close");
CPropDialog* cpdlg=new CPropDialog(); //CPropDialog 是从Cdialog派生出来的一个类
cpdlg->DoModal();
}在测试程序中,如下调用:
void CDllDialogTestView::OnShowdialog()
{
typedef void(*LPFNDLLFUNC1)();
HINSTANCE hDLL;
LPFNDLLFUNC1 lpfnDllFunc1;
hDLL=LoadLibrary("DllDialog"); HANDLE hRes = AfxGetResourceHandle();
AfxSetResourceHandle(hDLL);
if (hDLL!=NULL) {
lpfnDllFunc1=(LPFNDLLFUNC1)::GetProcAddress(hDLL,"ShowProperty"); if (lpfnDllFunc1!=NULL) { lpfnDllFunc1();
AfxMessageBox("Success");
}
}
else
AfxMessageBox("Fail"); AfxSetResourceHandle(hRes);
}