1,创建动态链接库在VS2008中,首先创建一个项目,
选择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