C/C++动态链接库的创建和使用,显式调用
2012-12-03 21:19
357 查看
1,创建动态链接库在VS2008中,首先创建一个项目,
选择win32应用程序,点击确定,下一步选择应用程序类型:DLL,附加选项是:空选项
在这个项目中创建一个头文件:CustomDll.h
在项目中创建一个源文件CustomDll.cpp
在项目中新建文件.def 文件,把DLL定义为导出函数CustomDll.def
点击生成-->>生成解决方案 会生成一个 C++Dll.dll的动态链接库文件,下面介绍这个动态链接库的显示调用:首先把C++Dll.dll和要调用的程序放在同一个目录:AppMain.cpp
本文出自 “Kenan_ITBlog” 博客,请务必保留此出处http://soukenan.blog.51cto.com/5130995/1077698
选择win32应用程序,点击确定,下一步选择应用程序类型:DLL,附加选项是:空选项
在这个项目中创建一个头文件:CustomDll.h
#ifdef CustomDLL_EXPORTS #define CustomDLL_API_declspec(dllexport) #else #define CustomDLL_API_declspec(dllimport) #endif //声明自定义导出函数 int DLLFuncAdd(int a,int b);
在项目中创建一个源文件CustomDll.cpp
#include "CustomDll.h" #include <Windows.h> //DllMain函数 就是动态链接库的入口点,windows在库装载,卸载,线程创建和结束的时候都要调用入口函数, //以便动态链接库可以采取相应的动作。 //hMODULE是该DLL模块的句柄,代表这个文件的映像加载到进程的地址空间时使用的基地址。 //ul_reason_for_call参数的值表示本次调用的原因,取值: // DLL_PROCESS_ATTACH被加载的时候 // DLL_PROCESS_DETACH被卸载的时候 // DLL_THREAD_ATTACH应用程序创建了一个新的线程 // DLL_THREAD_DETACH某个线程正常终止 BOOL APIENTRY DllMain( HMODULE hMODULE, DWORD ul_reason_for_call, LPVOID IpReserved) { switch (ul_reason_for_call) { //动态链接库被映射到某个进程的地址空间 case DLL_PROCESS_ATTACH: //应用程序创建新的县城 case DLL_THREAD_ATTACH: //应用程序某个线程正常终止 case DLL_THREAD_DETACH: //动态链接库将被卸载 case DLL_PROCESS_DETACH: break; } return true; } //自定义导出函数,求两个整数的和 int DLLFuncAdd(int a,int b){ return a+b; }
在项目中新建文件.def 文件,把DLL定义为导出函数CustomDll.def
EXPORTS DLLFuncAdd
点击生成-->>生成解决方案 会生成一个 C++Dll.dll的动态链接库文件,下面介绍这个动态链接库的显示调用:首先把C++Dll.dll和要调用的程序放在同一个目录:AppMain.cpp
#include <iostream> #include <Windows.h> using namespace std; //声明DLL里的函数原型 typedef int (*PFNEXPORTFUNC)(int,int); int main(){ int c = 12 ,d=20; int result; //加载目标DLL,利用LoadLibary()函数加载指定目录下的DLL库到进程的虚拟地址空间,函数执行成功的话,返回此DLL模块的句柄 //否则返回NULL //LoadLibary的函数声明 //HMODULE WINAPI //LoadLibrary( // LPCTSTR lpFileName //); HMODULE hMODULE = LoadLibrary(TEXT("c++_dll.dll")); if(hMODULE!=NULL){ PFNEXPORTFUNC mDLLfuncAdd = (PFNEXPORTFUNC) GetProcAddress(hMODULE,"DLLFuncAdd");// GetProcAddress这个函数来获得目标DLL中导出函数的地址 //GetProcAddress函数的声明 //FARPROC GetProAddress( // HMODULE hMOULE, // LPCSTR lpProcName // ); if(mDLLfuncAdd!=NULL){ result = mDLLfuncAdd(c,d); cout<<result<<endl; } //释放链接库占用的资源 FreeLibrary(hMODULE); } int t; cin>>t; return 0; }
本文出自 “Kenan_ITBlog” 博客,请务必保留此出处http://soukenan.blog.51cto.com/5130995/1077698
相关文章推荐
- C/C++动态链接库的创建和使用,显式调用
- 题目:使用VS2015与VS2013 创建C++动态链接库并调用
- 创建和使用动态链接库 (C++)C#调用
- 使用VS2015 创建C++动态链接库并调用
- 动态库学习 第1章——演练:创建和使用动态链接库 (C++)
- C/C++中动态链接库的创建和调用
- 【原创】C++创建和使用动态链接库之Win32DLL
- [C/C++]Windows动态链接库的创建与调用
- C/C++中动态链接库的创建和调用
- 创建和使用动态链接库 (C++)
- 【原创】C++创建和使用动态链接库之常规DLL
- Linux下动态链接库的创建和使用及C调用matlab动态库问题
- C/C++中动态链接库的创建和调用
- C++ VS 2008中ATL的创建,使用。并在C++项目以及C#项目中进行调用测试
- C/C++中动态链接库的创建和调用
- c++静态链接库和动态链接库的创建和调用
- 创建和使用动态链接库 (C++)
- 创建和使用动态链接库 (C++)
- eclipse 创建/使用c++ 动态链接库
- C/C++中动态链接库的创建和调用