MFC规则dll中获取当前模块句柄

对于普通规则的Dll,有需要的情况下通常会在DllMain中保存第一个参数hInstance的值,而MFC规则dll没有DllMain(准确来说是由MFC框架封装了),那该怎么拿到呢?

有人说GetModuleHandle(lpDllName)酱紫方法可以拿到。但是考虑一个问题,如果dll名字呗改了(极少数情况。。。),应该有种更好的方法。我们看MFC中给出的DllMain:

C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\src\mfc\dllinit.cpp :

BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID)
{
	try
	{
		if (dwReason == DLL_PROCESS_ATTACH)
		{

#ifdef _AFX_OLE_IMPL
			BOOL bRegister = !coreDLL.bInitialized;

			// shared initialization
			AFX_MODULE_STATE* pModuleState = _AfxGetOleModuleState();
			pModuleState->m_hCurrentInstanceHandle = hInstance;
			pModuleState->m_hCurrentResourceHandle = hInstance;
			pModuleState->m_pClassInit = pModuleState->m_classList.GetHead();
			pModuleState->m_pFactoryInit = pModuleState->m_factoryList.GetHead();
#endif


我们发现,hInstance是被保存到 pModuleState中的这两个成员里面的:
m_hCurrentInstanceHandle 
m_hCurrentResourceHandle 
刚好MFC有个函数:

AfxGetModuleState();

所以我们可以酱紫拿到hInstance:


BOOL CMFC_Handle_TestApp::InitInstance()
{
	CWinApp::InitInstance();
    AFX_MODULE_STATE* state = AfxGetModuleState();
    cout << state->m_hCurrentInstanceHandle << endl;
	return TRUE;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值