[問題] DLL裡的Dialog要產生OCX元件時,產生錯 …
遇到的問題: (題意請描述清楚)
續上個問題...
小弟自行用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)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章