描述:
第一.使用ATL向导实现事件时,并没有像书上那样去实现一个CProxy_IEvent类,而只是把事件接口作如下声明
__event __interface IEvent;
然后在程序激活事件的代码就简单的 __raise OnClick1(x, y);就可以了,这样做有什么不同
第二.ATL创建DLL项目时,其CATLDllModuleT实现了DLLMAIN等函数...我如何得到DLLMAIN函数中的HINSTANCE呢,CATLDLLModuleT似乎把这个参数给丢了....
解决方案1:
2.
HINSTANCE ModuleFromAddress(PVOID pv)
{
MEMORY_BASIC_INFORMATION mbi;
return ((VirtualQuery(pv, &mbi, sizeof(mbi)) != 0) ?
(HINSTANCE)mbi.AllocationBase : NULL);
}
HINSTANCE hDllInst = ModuleFromAddress(DllMain);
In ATL dll you can find
/////////////////////////////////////////////////////////////////////////////
// DLL Entry Point
extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
hInstance;
return _AtlModule.DllMain(dwReason, lpReserved);
}
DllMain calls CATLDllModuleT.DllMain member.