作者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)