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