DLL
来源:互联网 发布:烘焙软件 编辑:程序博客网 时间:2024/05/08 16:51
一、AfxInitExtensionModule
BOOL AFXAPI AfxInitExtensionModule( AFX_EXTENSION_MODULE& state, HMODULE hModule );
返回值:
如果成功地初始化了扩展DLL,则返回TRUE;否则返回FALSE。
参数:
说明:
在扩展DLL的DllMain中调用此函数以初始化DLL。例如:
static AFX_EXTENSION_MODULE extensionDLL;
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID)
{
if(dwReason == DLL_PROCESS_ATTACH)
{
// 扩展DLL 一次性初始化
if(!AfxInitExtensionModule(extensionDLL, hInstance)) return 0;
...
}
}
AfxInitExtensionModule生成DLL的HMODULE的一个拷贝,并捕捉DLL的运行类(CRuntimeClass结构)和它的对象工厂(COleObjectFactory对象)以供创建CDynLinkLibrary时使用。
MFC的扩展DLL必须在它们的DllMain函数中做两件事情: ·调用AfxInitExtensionModule 并检验返回值。·如果DLL要引出CRuntimeClass对象或者具有它自己的资源,则创建一个CDynLinkLibrary对象。当每个进程与扩展DLL分离时(这发生在进程退出,或者因为调用了AfxFreeLibrary,DLL被卸载时),你可以调用AfxTermExtensionModule来清除扩展DLL。
二、GetModuleHandle
HMODULE GetModuleHandle (LPCTSTR lpModuleName);
功能说明: 获取一个应用程序或动态链接库的模块句柄
lpModuleName 模块名称
返回值:如执行成功成功,则返回模块句柄。零表示失败。通过GetLastError获得错误信息
如:
GetModuleHandle(NULL); 这将返回自身应用程序句柄
HINSTANCE hInstance3 = GetModuleHandle(_T("EAW.dll"));返回动态导入的库:EAW.dll的句柄
注意
前提是:只有欲获取的模块已映射到调用该函数的进程内,才会正确得到模块句柄。常用模块映射函数:LoadLibrary(..)。。。
三、LoadLibrary 和 AfxLoadLibrary
进程调用 LoadLibrary(或 AfxLoadLibrary)以显式链接到 DLL。 如果成功,则该函数将指定的 DLL 映射到调用进程的地址空间中并返回该 DLL 的句柄。此句柄可以与其他函数(如 GetProcAddress 和 FreeLibrary)一起在显式链接中使用。
LoadLibrary 将尝试使用用于隐式链接的相同搜索序列来查找 DLL。 如果系统无法找到所需的 DLL 或者入口点函数返回 FALSE,则 LoadLibrary 将返回 NULL。 如果对 LoadLibrary 的调用所指定的 DLL 模块已映射到调用进程的地址空间中,则该函数将返回该 DLL 的句柄并递增模块的引用数。
如果 DLL 具有入口点函数,则操作系统将在调用 LoadLibrary 的线程的上下文中调用此函数。 如果由于以前调用了 LoadLibrary,但没有相应地调用 FreeLibrary 函数,从而导致已经将 DLL 附加到进程,则不会调用此入口点函数。
对于加载扩展 DLL 的 MFC 应用程序,建议使用 AfxLoadLibrary,而不使用 LoadLibrary。 在调用 LoadLibrary 之前,AfxLoadLibrary 处理线程同步。 AfxLoadLibrary 的接口(函数原型)与 LoadLibrary 相同。
如果 Windows 无法加载 DLL,则进程会尝试从错误中恢复。 例如,进程会通知用户所发生的错误,并要求用户指定 DLL 的其他路径。
如果代码要在 Windows NT 4、Windows 2000 或 Windows XP(SP1 以前的版本)下运行,则请确保为所有 DLL 指定完整路径名。 在这些操作系统中,加载文件时会首先搜索当前目录。 如果没有限定文件的路径,则可能会加载不需要的文件。
HINSTANCE hInstance = AfxLoadLibrary(DLL路径);
四、AfxGetInstanceHandle
HINSTANCE AfxGetInstanceHandle( );
例:HINSTANCE hInstance = AfxGetInstanceHandle();
返回值:
代表应用程序的当前实例的HINSTANCE值。如果是从与MFC的USRDLL版本连接的DLL内调用的,则返回代表DLL的HINSTANCE值。
说明:
这个函数使你能够获得当前应用程序的实例句柄。AfxGetInstanceHandle总是返回代表你的可执行文件(.EXE)的HINSTANCE值,除非它从与MFC的USRDLL版本连接的DLL内调用的。在这种情况下,它返回的是DLL的HINSTANCE值。
五、AfxGetResourceHandle
六、MAKEINTRESOURCE
- dll
- DLL
- dll
- DLL
- DLL
- DLL
- Dll
- DLL
- DLL
- DLL
- DLL
- dll
- dll
- dll
- Dll
- DLL
- dll
- DLL
- vi编辑器学习
- W3Techs: 全球 www 网站技术调查报告
- Smarty 定界符 花括号 大括号 函数定义 转义
- ArcGIS在线应用介绍(9)越野路线分析
- 数组名字和数组取地址的区别
- DLL
- C# 术语
- 魔兽3模型文件 MDL 格式说明
- 动态网站Web开发用什么语言好?PHP、ASP还是ASP.NET
- Visual C++开发的途中
- 减少功耗同时保持CPU性能的一种方法
- Access 下载 爆库
- js中substr与substring的区别
- COM组件简介