标准C/C++的DLL编写
首先,你要确定你要导出那些个函数,然后你就在你要导出的函数名前加上下面一句话:
// 输出函数的前缀
#define DLL_EXPORT
extern "C"
__declspec(
dllexport )
DLL_EXPORT
VOID
ExportFun()
{
...
}
是不是很简单啊。如果你要导出整个类或者全局变量,你需要这样做:
// 输出类的前缀
#define DLL_CLASS_EXPORT
__declspec(
dllexport )
// 输出全局变量的前缀
#define DLL_GLOBAL_EXPORT
extern __declspec(
dllexport )
完成了这些以后,我们就要在主程序中调用这些个函数了,用下面的方法:
HINSTANCE hInst = NULL;
hInst = LoadLibrary("*.dll");
// 你的DLL文件名
if (!hInst)
{
MessageBox(hWnd,"无法加载 *.Dll ","Error",MB_OK);
}
还记得上面我声明的那个ExportFun()函数吗?我不能直接得到那个函数,但是可以把那个函数的地址取出来。其实函数地址使用起来和函数是一样的。只不过,为了使用方便,需要定义一个函数指针的类型。如果要指向上面的那个ExportFun(),则它的函数指针的类型定义如下:
typedef void (CALLBACK* LPEXPORTFUN)(void)
之后需要做的是声明一个指针,然后得到DLL中ExportFun()的地址。GetProcAddress函数的第一个参数是之前得到的DLL的实例句柄,后面一个是DLL中那个函数的函数名。
LPEXPORTFUN pFun = NULL;
LPEXPORTFUN pFun = (LPEXPORTFUN)GetProcAddress(hInst, "ExportFun");
好了,到这里已经就要大功告成了,还差最后一步,调用那个函数:
pFun();
大功告成!!