作者:shenzi
链接:http://blog.csdn.net/shenzi
Windows核心编程:DLL高级技术
1.DLL模块的显示载入和符号链接
图1显示了应用程序如何显示地载入一个DLL并与DLL的符号进行链接:
图1:DLL创建过程以及应用程序显式链接到DLL的过程
构建DLL 1)头文件,其中包含待导出函数的原型、结构和符号的声明 2)C/C++源文件,其中包含待导出函数的实现和变量 3)编译器为每个C/C++源文件生成.obj文件 4)连接器将每个.obj模块合并,从而生成DLL 5)如果至少导出了一个函数/变量,那么链接器会同时生成.lib文件 注意:在显示链接的时候,没有用到这个.lib文件 |
构建EXE 6)头文件,其中包含待导出函数的原型、结构和符号的声明 7)C/C++源文件,其中包含待导出函数的实现和变量 8)编译器为每个C/C++源文件生成.obj文件 9)链接器将每个.obj模块合并,从而生成.exe 注意:由于没有直接引用该DLL导出的符号,因此这里不需要它的.lib文件。生成的.exe文件中不包含导入表 |
显示地载入DLL模块
在任何时候,进程中的一个线程可以调用下面两个函数来将一个DLL映射到进程的地址空间中:
HMODULE LoadLibrary(PCTSTR pszDLLPathName);
HMODULE LoadLibraryEx(
PCTSTR pszDLLPathName,
HANDLE hFile,
DWORD dwFlags);
这两个函数会在用户的系统中对DLL的文件映像进行定位,并试图将该文件映像映射到调用进程的