//下面是真正使用自定义动态链接库的代码,与使用Windows的DLL很像。
typedef unsigned int (*PFOO)(unsigned int iPara);
int main()
{ //要注意要正确放置MyDll.mdll,最好和这个测试程序在同一个目录下。
MYHANDLE handle = (MYHANDLE)MyLoadLibrary("MyDll.mdll");
PFOO pfoo=( PFOO)MyGetProcAddress(handle, "foo");
printf(“%d! = %d”, 5, pfoo(5)); //计算 5的阶乘
MyFreeLibrary(handle);
return 1;
} /*P4 CPU,Win XP SP2,VC6 以C++文件形式编译运行通过*/
上面代码模拟了Windows中动态使用DLL的API。当然Windows中这几个API函数的实现远非这么简单。
5 结语
通过上面的介绍大家应该可以了解动态链接库的基本原理。上面的模拟代码实现了最简单的动态链接库,如果要在一个.mdll文件中包含多个函数的实现,那就要把多个函数的机器指令写到相同文件中,还要在文件中安排一个索引,记录每个函数在该.mdll文件中的偏移和长度。如果要在Windows中当多个进程使用同一个动态链接库时,要保证内存中只有一份指令,只有借助于映射文件来实现。也可用于简单的嵌入式操作系统中,以实现对动态链接库的支持。当然前提是有外存,而且在内存中数据单元和代码单元是统一编址的。
参考文献
[1]DON BOX. COM本质论[M]. 北京:中国电力出版社,2001.
[2]汪兵,李存斌,陈鹏,等. EVC高级编程及其应用开发[M]. 北京:中国水利水电出版社,2005.
[3] Jeffrey Richter. Windows核心编程[M].北京:机械工业出版社,2007. [4]张正秋. Windows应用程序捆绑核心编程[M] .北京:清华大学出版社,2006.
|