4.1生成方法
实际当中动态链接库的可执行代码存在于.dll文件中,而.dll文件是由编译器直接生成的。在这个方法中不会特地去实现一个编译器来生成.mdll文件,那样的工作量是巨大的而且过程是复杂的。编译器虽然不能直接生成.mdll文件,但是可以得用一些技巧使编译器间接地来生成.mdll文件。
先介绍这个方法的原理。一个函数被编译运行后,其可执行指令便存在于内存中了,而这段可执行指令在内存中的开始地址,是可以通过函数名得到的。因此,只要把某个函数名所指单元开始的一段内存内容写入文件,便得到了一个简单的动态链接库文件。
下面结合实例来解释这个方法。假如要在自定义的动态链接库中实现一个计算n阶乘的递归函数,其函数原型如下:
unsigned int foo(unsigned int iPara);
具体看如下代码:
#include <stdio.h>
unsigned int foo(unsigned int iPara) //导出函数
{
if(0 == iPara || 1 == iPara) return 1;
return iPara*foo(iPara-1);
}
//下面的函数用于生成自定义的动态链接库文件
void DLLGenerator(void *pFun, char *pDllName, int iCodeLen)
{
FILE *fp;
fp = fopen(pDllName, "wb"); //创建自定义动态链接库文件
fwrite(pFun, iCodeLen, 1, fp); //将机器码写入文件
fclose(fp);
}
int main()
{
|