作者Naleiya (小雞小雞吃東西)
看板C_and_CPP
標題[問題] 為何在自製DLL裡Create dialog之後,它的hWnd是空的
時間Thu Apr 1 19:10:17 2010
遇到的問題: (題意請描述清楚)
小弟自行用VC++6製作了一個Dll,叫作DllWrapper
專案是選擇其它Win32程式也可以呼叫的那種DLL專案
裡面有一個class是專案自行產生的,名稱為CDllWrapperApp,繼承CWinApp
我的DllWrapper目的是要能產生一個Dialog視窗,其ID為IDD_SOCKETDLG
當外部呼叫DllWrapper的介面函數時,會轉call CDllWrapperApp
的某函數去產生一個Dialog,程式碼如下:
m_pSocketDlg = new CSocketDlg(m_szRootPath, m_hSocket);
if (!m_pSocketDlg->Create(IDD_SOCKETDLG, NULL))
{
.....
return False;
}
.....
希望得到的正確結果:
能正確產生Dialog的hWnd,代表產生視窗成功
程式跑出來的錯誤結果:
現在的問題是,在new CSocketDlg時,除錯視窗就可以看到m_pSocketDlg
有位址數值出現,但是其hWnd還是0x00000000,往下執行到Create時,
hWnd也是一樣為0
我有把Create的第2個參數NULL改為呼叫該DLL的視窗的m_pMainWnd(從外部
的呼叫程式傳進DLL內),也是沒有作用
請問各位高手,是不是有什麼地方沒有注意到?
還是我的專案骨架選錯了?
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
VC++ 6, WinXP
有問題的code: (請善用置底文標色功能)
補充說明:
我是用LoadProcAddress()、GetProcAddress()的方式呼叫DLL
但也有試過用.lib + extern "C" __declspec(dllimport) int funcname();
的方式,但一樣是不行的
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.147.4.130
1F:→ ironhead:exe & dll have different resource... 04/01 21:52
2F:→ Naleiya:那請問是要如何修改呢? 04/02 08:06
3F:→ WPC001:dll 應該要內建自己的res,另外MFC DLL對外要Manage State 04/02 08:35
=>非常感謝,我加上AFX_MANAGE_STATE(AfxGetStaticModuleState());
之後,就可以產生dialog了。而我的res是DLL專案本身的resource.h所定義的,
不是exe裡的,所以應該這樣就對了吧。
4F:→ Knighter:vb6可以呼叫vc6所做的dll喔!!!!!! 04/02 10:01
※ 編輯: Naleiya 來自: 122.147.4.130 (04/02 10:52)