DLLGenerator((void *)foo, "MyDll.mdll", 1000); //代码长度1000是估计值
return 1;
} /*P4 CPU,Win XP SP2,VC6 以C++文件形式编译运行通过*/
上面的程序编译并且运行后便会生成MyDll.mdll文件,其内容主要是计算n阶乘函数的机器码。这样自定义的动态链接库文件便生成了。
4.2 自定义使用方法
使用自定义的动态链接库也很简单,首先,将.mdll文件的内容读到一块内存中;其次,用一个恰当类型的函数指针指向这块内存的首地址。接下来就可以通过这个函数指针使用相关函数了。
#include <stdio.h>
#include <stdlib.h>
typedef void* MYHANDLE;
//自定义动态链接库的载入函数
MYHANDLE MyLoadLibrary(char *pDllName)
{
FILE *fp;
fp = fopen(pDllName, "rb");
fseek(fp, 0, SEEK_END);
unsigned int lCodeLen = ftell(fp);//获取文件大小
void *pFun = malloc(lCodeLen);
fseek(fp, 0, SEEK_SET);
fread(pFun, lCodeLen, 1, fp); //将机器码读入内存
fclose(fp);
return pFun;
}
//查找指定函数的地址。由于这里只有一个函数所以很简单。
MYHANDLE MyGetProcAddress(MYHANDLE handle, char *pFunName)
{
return handle;
}
//释放自定义动态链接库
bool MyFreeLibrary(void *pFun)
{
free(pFun);
return true;
}
|