在 ATL 7.0 项目中获取 DLL 模块句柄






4.78/5 (7投票s)
2002 年 3 月 7 日

80862
检索您的 ATL 对象 HINSTANCE 的最简单方法
引言
在 ATL 7.0 中,主源文件中的 module
语句会自动为你实现 DllMain
、DllRegisterServer
和 DllUnregisterServer
。
旧的方式(虽然不算太旧)已经被抛弃,并且 _Module
不再是实现的一部分。
微软显然对此并没有过多讨论,但这个对象包含了一些方便的属性,可以用来操作 DLL 的组成部分,例如资源。
一种方法是使用旧的 GetModuleHandle()
API 函数,但在某些情况下,它可能对你(以及对我)不起作用。
因此,要访问 ATL 3.0 中的 _Module
,你只需使用 _AtlBaseModule
。AtlBaseModule
现在已经取代了旧的 CComModule
,非常棒,因为文档中几乎没有提及其数据成员。
然而,与其直接使用 m_hInst
,不如通过诸如 GetModuleInstance()
、GetResourceInstance()
和 GetHInstanceAt()
等方法来访问它,用于资源本地化和国际化(感谢 Tim)。无论如何,我希望它能解决你的问题,就像它解决了我的问题一样。
一个非常小的例子
HINSTANCE hInst = (HINSTANCE) _AtlBaseModule.m_hInst;享受吧!!!
HICON hIcon = LoadIcon(hInst, MAKEINTRESOURCE(212));