65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.78/5 (7投票s)

2002 年 3 月 7 日

viewsIcon

80862

检索您的 ATL 对象 HINSTANCE 的最简单方法

引言

在 ATL 7.0 中,主源文件中的 module 语句会自动为你实现 DllMainDllRegisterServer 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));
享受吧!!!

© . All rights reserved.