2011-04-16 17:33:01|?次阅读|上传:wustguangh【已有?条评论】发表评论
VC编程时DLL导出函数的方式主要有两种:一种方式是:在函数声明中加上__declspec(dllexport);另外一种方式是:采用模块定义(.def)文件声明,(.def)文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。下面分别进行介绍:
/// 在动态链接库程序中 /// 声明动态链接库(**.dll)的对外接口函数TestFuction extern "C" __declspec(dllexport) int TestFuction(int nType,char *strPath, std::vector &vecData) { ////do anything here//// return 0; } /// 在外部希望调用动态链接库的程序中 /// 加载动态链接库(**.dll)并调用其对外接口TestFuction void func() { //typedef与函数TestFuction类型相同的函数指针为TESTDLL typedef int (_cdecl * TESTDLL)(int nType,char *strPath, std::vector &vecData); HINSTANCE hmod; //加载动态链接库**.dll hmod =::LoadLibrary(_TEXT("dll相对路径**.dll")); if(NULL == hmod) { TRACE("加载**.dll失败"); } //定义一个与函数TestFuction类型相同的函数指针lpproc TESTDLL lpproc; //搜索**.dll中函数名为TestFuction的对外接口 lpproc = (TESTDLL)GetProcAddress (hmod,"TestFuction"); //如果搜索成功 if(NULL != lpproc) { int nType = 0; char* strPath = "Data"; std::vector vecData; //通过函数指针lpproc调用**.dll的接口函数TestFuction int nResult = (*lpproc)(nType,strPath,vecData); } //... //在恰当的时候释放动态链接库**.dll FreeLibrary(hmod); }
首先创建 一个DLL程序(DllTestDef)