我的步骤:
1.创建动态库,加入接口函数如下
extern "C" __declspec(dllexport) void OrderDetailShow(CDatabase* pDb,
CString sMode,CString sOrderNo,CString sOption)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()); /*
COrderDetail dlgOrderDetail;
dlgOrderDetail.m_pDb=pDb;
dlgOrderDetail.DoModal();
*/COrderDetail * pDlg = NULL;
//---------------------------------------------
pDlg = new COrderDetail();
pDlg->m_pDb=pDb;
pDlg->Create( IDD_ORDERDETAIL);
pDlg->ShowWindow( SW_SHOW );
pDlg->UpdateWindow();//-------------------------------------------- return ;
}2.创建EXE测试程序,调用DLL HINSTANCE hmod;
TESTDLL lpproc; typedef void (* __stdcall TESTDLL)(CDatabase* pDb,CString sMode,CString sOrderNo,CString sOption);
hmod = ::LoadLibrary (sDllName);
if(hmod==NULL)
{
AfxMessageBox("Fail");
}
lpproc = (TESTDLL)GetProcAddress (hmod,sDllInterface);
ASSERT(lpproc);
CWnd* pwnd=this->GetWindow(GW_OWNER);
if(lpproc!=(TESTDLL)NULL)
(*lpproc)(theDb,sOptionA,sOptionB,theName,pwnd);
FreeLibrary(hmod); 请问:为何我的动态库调用就出错呢?是因为非模式对话框的问题码,原来是模式对话框,就好用〉
1.创建动态库,加入接口函数如下
extern "C" __declspec(dllexport) void OrderDetailShow(CDatabase* pDb,
CString sMode,CString sOrderNo,CString sOption)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()); /*
COrderDetail dlgOrderDetail;
dlgOrderDetail.m_pDb=pDb;
dlgOrderDetail.DoModal();
*/COrderDetail * pDlg = NULL;
//---------------------------------------------
pDlg = new COrderDetail();
pDlg->m_pDb=pDb;
pDlg->Create( IDD_ORDERDETAIL);
pDlg->ShowWindow( SW_SHOW );
pDlg->UpdateWindow();//-------------------------------------------- return ;
}2.创建EXE测试程序,调用DLL HINSTANCE hmod;
TESTDLL lpproc; typedef void (* __stdcall TESTDLL)(CDatabase* pDb,CString sMode,CString sOrderNo,CString sOption);
hmod = ::LoadLibrary (sDllName);
if(hmod==NULL)
{
AfxMessageBox("Fail");
}
lpproc = (TESTDLL)GetProcAddress (hmod,sDllInterface);
ASSERT(lpproc);
CWnd* pwnd=this->GetWindow(GW_OWNER);
if(lpproc!=(TESTDLL)NULL)
(*lpproc)(theDb,sOptionA,sOptionB,theName,pwnd);
FreeLibrary(hmod); 请问:为何我的动态库调用就出错呢?是因为非模式对话框的问题码,原来是模式对话框,就好用〉
2、对于非模式对话框,由于本身没有消息循环,所以需要调用者提供消息循环
这个好像和你的动态库函数不一样啊,pwnd传给谁啊???
COPY错了,应该是
if(lpproc!=(TESTDLL)NULL)
(*lpproc)(theDb,sOptionA,sOptionB,theName);原来我认为pDlg->Create( IDD_ORDERDETAIL)这个函数必须要父窗口句柄来着,但也不好用。
TO flyelf(空谷清音) 1、对于非模式对话框,lpproc(...)之后不能马上就freelibrary
能具体些么,按我的代码,应该如何做呢?2、对于非模式对话框,由于本身没有消息循环,所以需要调用者提供消息循环
消息循环放在哪里阿,是EXE里么