[問題] DLL裡的Dialog要產生OCX元件時,產生錯 …

看板C_and_CPP (C/C++)作者 (小雞小雞吃東西)時間16年前 (2010/04/02 11:33), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 續上個問題... 小弟自行用VC++6製作了一個Dll,叫作DllWrapper, 專案是選擇其它Win32程式也可以呼叫的那種DLL專案, 我的DllWrapper目的是要能產生一個Dialog視窗,其ID為IDD_SOCKETDLG, 接著這個Dialog會產生一個OCX,但這OCX的hWnd為0x0000000。 之前這整個流程是在單一應用程式中執行就沒有問題,不知為何搬到DLL內就會出錯? 詳細情況如下,只有秀出我覺得重要的程式碼: ===== 當外部呼叫DllWrapper的介面函數時,會產生一個Dialog,如下: AFX_MANAGE_STATE(AfxGetStaticModuleState()); m_pSocketDlg = new CSocketDlg(m_szRootPath, m_hSocket); m_pSocketDlg->Create(IDD_SOCKETDLG, NULL) 然後用send訊息的方式,讓這個Dialog產生一個socket.ocx ::SendMessage(m_pSocketDlg->m_hWnd, UDM_SOCK_CREATE, 0, 0); UDM_SOCK_CREATE是對應到OnSockCreate,如下: ON_MESSAGE(UDM_SOCK_CREATE, OnSockCreate) 接著進入OnSockCreate(),CSocket是一個OCX元件 BOOL CSocketDlg::OnSockCreate() { ...略 AfxEnableControlContainer(); //這個是網路上找到說要加的 m_pSocket = new CSocket; m_pSocket->Create(NULL, WS_CHILD, CRect(0,0,0,0), this, IDC_MAINSOCKID); ...略 } ===== 到此為此有m_pSocket的位址,但是沒有其hWnd的位址 (...ㄜ,好像跟上一個問題類似) 而m_pSocket->Create()的內容如下,是呼叫CWnd的函式 CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID, pPersist, bStorage, bstrLicKey); 之前這整個流程是在單一應用程式中執行就沒有問題, 是否DLL裡要引用OCX元件有額外需要注意的地方呢? 懇請各位高手不吝指教,有任何小小的想法都能提供謝謝。 希望得到的正確結果: 能建立OCX元件的hWnd能正確產生 程式跑出來的錯誤結果: 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) VC++ 6, WinXP 有問題的code: (請善用置底文標色功能) 補充說明: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.147.4.130 ※ 編輯: Naleiya 來自: 122.147.4.130 (04/02 11:49)
文章代碼(AID): #1BjML-RE (C_and_CPP)
文章代碼(AID): #1BjML-RE (C_and_CPP)