[問題] 為何在自製DLL裡Create dialog之後,它 …

看板C_and_CPP作者 (小雞小雞吃東西)時間14年前 (2010/04/01 19:10), 編輯推噓0(004)
留言4則, 4人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 小弟自行用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

04/01 21:52, , 1F
exe & dll have different resource...
04/01 21:52, 1F

04/02 08:06, , 2F
那請問是要如何修改呢?
04/02 08:06, 2F

04/02 08:35, , 3F
dll 應該要內建自己的res,另外MFC DLL對外要Manage State
04/02 08:35, 3F
=>非常感謝,我加上AFX_MANAGE_STATE(AfxGetStaticModuleState()); 之後,就可以產生dialog了。而我的res是DLL專案本身的resource.h所定義的, 不是exe裡的,所以應該這樣就對了吧。

04/02 10:01, , 4F
vb6可以呼叫vc6所做的dll喔!!!!!!
04/02 10:01, 4F
※ 編輯: Naleiya 來自: 122.147.4.130 (04/02 10:52)
文章代碼(AID): #1Bj7ySBR (C_and_CPP)