這期教程是為各位講解在VC++ 6.0如何創(chuàng)建與調(diào)用動態(tài)鏈接庫,感興趣的就趕緊去下文學(xué)習(xí)下吧,相信你們會喜歡。
VC++ 6.0創(chuàng)建與調(diào)用動態(tài)鏈接庫的操作教程
靜態(tài)鏈接庫與動態(tài)鏈接庫區(qū)別:
靜態(tài)鏈接庫:lib中的指令被直接包含在最終生成的EXE文件中。
動態(tài)鏈接庫:dll不必被包含在最終的EXE中,EXE文件執(zhí)行時可以動態(tài)地引用和卸載DLL文件。
同時,靜態(tài)鏈接庫中不能再包含其他的動態(tài)鏈接庫或靜態(tài)庫,而動態(tài)鏈接庫中可以包含其他的動態(tài)或靜態(tài)庫。
VC++支持的DLL:
DLL的編制與具體的編程語言及編譯器無關(guān),動態(tài)鏈接庫隨處可見,VC++支持三種DLL:非MFC動態(tài)庫、MFC規(guī)則DLL和MFC擴展DLL。DLL導(dǎo)出函數(shù)(或變量、類)可供應(yīng)用程序調(diào)用;DLL內(nèi)部函數(shù)只能在DLL程序內(nèi)使用,應(yīng)用程序無法調(diào)用它們。
導(dǎo)出函數(shù)的聲明方式:
一種在函數(shù)聲明類型和函數(shù)名之間加上“_declspec(dllexport)”。
另外一種采用模塊定義(.def)文件聲明,需要在庫工程中添加模塊文件,格式如下:
LIBRARY 庫工程名稱
EXPORTS 導(dǎo)出函數(shù)名
DLL的調(diào)用方式:
一種靜態(tài)調(diào)用,由編譯系統(tǒng)完成對DLL的加載和應(yīng)用程序結(jié)束時DLL的卸載。
另外一種動態(tài)調(diào)用,由編程者用API函數(shù)加載和卸載DLL(DLL加載—DLL函數(shù)地址獲取—DLL釋放)方式。
所有庫工程編譯時必須Release方式:
Build—set active configuration—選擇庫工程的release方式
示例:
一、 函數(shù)----創(chuàng)建動態(tài)鏈接庫(MFC規(guī)則DLL)
1. New--projects--MFC AppWizard(dll)--Regular DLL using shared MFC DLL //取名為MFC_dll
2. def文件中添加:函數(shù)名(Add_new)
3. h文件中添加:外部函數(shù)聲明//求和函數(shù),函數(shù)名為Add_new
extern "C" __declspec(dllexport) int __stdcall Add_new(int a,int b);
4. cpp文件中添加: 外部函數(shù)實現(xiàn)
extern "C" __declspec(dllexport) int __stdcall Add_new(int a,int b)
{
return a+b;
}
5. build--set active configuration--win32 release--ok
6. 生成
7. 根目錄下release文件夾中dll,lib與根目錄下h文件即為所需
二、 函數(shù)----調(diào)用動態(tài)鏈接庫(把MFC_dll.dll和MFC_dll.lib拷到工程所在目錄)
//靜態(tài)調(diào)用(.h可以寫到.cpp文件中)
1. new--projects--win32 console application--an empty project
2. 添加h文件:(test.h)
#pragma comment(lib,"MFC_dll.lib") //告訴編譯器DLL相對應(yīng)的lib文件所在路徑和文件名
extern "C" _declspec(dllimport) int _stdcall Add_new(int a,int b);//聲明導(dǎo)入函數(shù)
3. 添加cpp文件:(main.cpp)
#include "test.h"
int main()
cout<
return 0;
//動態(tài)調(diào)用
#include
typedef int (* lpAddFun)(int ,int);//定義一個與Add_new函數(shù)接受參數(shù)類型和返回值均相同的函數(shù)指針類型
HINSTANCE hDll;//句柄
lpAddFun addFun;//函數(shù)指針
hDll=LoadLibrary("dllTest.dll");//動態(tài)加載DLL模塊句柄
if(hDll)
addFun=(lpAddFun) GetProcAddress(hDll,"Add_new");//得到所加載DLL模塊中函數(shù)的地址
if(addFun)
int result=addFun(2,3);
printf("%d",result); } FreeLibrary(hDll);//釋放已經(jīng)加載的DLL模塊
三、 變量----創(chuàng)建動態(tài)鏈接庫(非MFC DLL)
1. new---projects---win32 dynamic-link library----an empty project(Sample)
2. 添加sample.h
#ifndef SAMPLE_H
#define SAMPLE_H
extern int dllGlobalVar;
#endif
3. 添加 sample.cpp
#include "sample.h"
int dllGlobalVar;
bool APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
//windows在加載DLL時,需要一個入口函數(shù),就如同控制臺或DOS程序需要main函數(shù)、win32程序需要winmain函數(shù)一樣。所以引入一個不做任何操作的缺省DllMain的函數(shù)版本。是DLL的內(nèi)部函數(shù)。
以上就是小編給大家?guī)淼娜績?nèi)容,大家都學(xué)會了嗎?
體育競技
310.89MB
88.6MB
47.8MB
游戲輔助 | 4.5GB
2024-04-24
動作格斗 | 20GB
2024-04-23
角色扮演 | 3.2GB
2024-04-22
角色扮演 | 500MB
休閑益智 | 30.17MB
2024-04-18
生活服務(wù) | 144.35MB
學(xué)習(xí)教育 | 24.26MB
2023-11-08
系統(tǒng)工具 | 6.78MB
體育競技 | 88.6MB
體育競技 | 47.8MB
體育競技 | 310.89MB
聯(lián)系:81537344@qq.com
CopyRight?2023 yiwangvip.com All Right Reserved 京ICP備12030808號-4
VC++ 6.0創(chuàng)建與調(diào)用動態(tài)鏈接庫的操作教程
這期教程是為各位講解在VC++ 6.0如何創(chuàng)建與調(diào)用動態(tài)鏈接庫,感興趣的就趕緊去下文學(xué)習(xí)下吧,相信你們會喜歡。
VC++ 6.0創(chuàng)建與調(diào)用動態(tài)鏈接庫的操作教程
靜態(tài)鏈接庫與動態(tài)鏈接庫區(qū)別:
靜態(tài)鏈接庫:lib中的指令被直接包含在最終生成的EXE文件中。
動態(tài)鏈接庫:dll不必被包含在最終的EXE中,EXE文件執(zhí)行時可以動態(tài)地引用和卸載DLL文件。
同時,靜態(tài)鏈接庫中不能再包含其他的動態(tài)鏈接庫或靜態(tài)庫,而動態(tài)鏈接庫中可以包含其他的動態(tài)或靜態(tài)庫。
VC++支持的DLL:
DLL的編制與具體的編程語言及編譯器無關(guān),動態(tài)鏈接庫隨處可見,VC++支持三種DLL:非MFC動態(tài)庫、MFC規(guī)則DLL和MFC擴展DLL。DLL導(dǎo)出函數(shù)(或變量、類)可供應(yīng)用程序調(diào)用;DLL內(nèi)部函數(shù)只能在DLL程序內(nèi)使用,應(yīng)用程序無法調(diào)用它們。
導(dǎo)出函數(shù)的聲明方式:
一種在函數(shù)聲明類型和函數(shù)名之間加上“_declspec(dllexport)”。
另外一種采用模塊定義(.def)文件聲明,需要在庫工程中添加模塊文件,格式如下:
LIBRARY 庫工程名稱
EXPORTS 導(dǎo)出函數(shù)名
DLL的調(diào)用方式:
一種靜態(tài)調(diào)用,由編譯系統(tǒng)完成對DLL的加載和應(yīng)用程序結(jié)束時DLL的卸載。
另外一種動態(tài)調(diào)用,由編程者用API函數(shù)加載和卸載DLL(DLL加載—DLL函數(shù)地址獲取—DLL釋放)方式。
所有庫工程編譯時必須Release方式:
Build—set active configuration—選擇庫工程的release方式
示例:
一、 函數(shù)----創(chuàng)建動態(tài)鏈接庫(MFC規(guī)則DLL)
1. New--projects--MFC AppWizard(dll)--Regular DLL using shared MFC DLL //取名為MFC_dll
2. def文件中添加:函數(shù)名(Add_new)
3. h文件中添加:外部函數(shù)聲明//求和函數(shù),函數(shù)名為Add_new
extern "C" __declspec(dllexport) int __stdcall Add_new(int a,int b);
4. cpp文件中添加: 外部函數(shù)實現(xiàn)
extern "C" __declspec(dllexport) int __stdcall Add_new(int a,int b)
{
return a+b;
}
5. build--set active configuration--win32 release--ok
6. 生成
7. 根目錄下release文件夾中dll,lib與根目錄下h文件即為所需
二、 函數(shù)----調(diào)用動態(tài)鏈接庫(把MFC_dll.dll和MFC_dll.lib拷到工程所在目錄)
//靜態(tài)調(diào)用(.h可以寫到.cpp文件中)
1. new--projects--win32 console application--an empty project
2. 添加h文件:(test.h)
#pragma comment(lib,"MFC_dll.lib") //告訴編譯器DLL相對應(yīng)的lib文件所在路徑和文件名
extern "C" _declspec(dllimport) int _stdcall Add_new(int a,int b);//聲明導(dǎo)入函數(shù)
3. 添加cpp文件:(main.cpp)
#include "test.h"
int main()
{
cout<
return 0;
}
//動態(tài)調(diào)用
#include
#include
typedef int (* lpAddFun)(int ,int);//定義一個與Add_new函數(shù)接受參數(shù)類型和返回值均相同的函數(shù)指針類型
int main()
{
HINSTANCE hDll;//句柄
lpAddFun addFun;//函數(shù)指針
hDll=LoadLibrary("dllTest.dll");//動態(tài)加載DLL模塊句柄
if(hDll)
{
addFun=(lpAddFun) GetProcAddress(hDll,"Add_new");//得到所加載DLL模塊中函數(shù)的地址
if(addFun)
{
int result=addFun(2,3);
printf("%d",result); } FreeLibrary(hDll);//釋放已經(jīng)加載的DLL模塊
}
return 0;
}
三、 變量----創(chuàng)建動態(tài)鏈接庫(非MFC DLL)
1. new---projects---win32 dynamic-link library----an empty project(Sample)
2. 添加sample.h
#ifndef SAMPLE_H
#define SAMPLE_H
extern int dllGlobalVar;
#endif
3. 添加 sample.cpp
#include "sample.h"
#include
int dllGlobalVar;
bool APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
//windows在加載DLL時,需要一個入口函數(shù),就如同控制臺或DOS程序需要main函數(shù)、win32程序需要winmain函數(shù)一樣。所以引入一個不做任何操作的缺省DllMain的函數(shù)版本。是DLL的內(nèi)部函數(shù)。
以上就是小編給大家?guī)淼娜績?nèi)容,大家都學(xué)會了嗎?
體育競技
310.89MB
體育競技
88.6MB
體育競技
47.8MB
游戲輔助 | 4.5GB
2024-04-24
動作格斗 | 20GB
2024-04-23
角色扮演 | 3.2GB
2024-04-22
角色扮演 | 500MB
2024-04-22
休閑益智 | 30.17MB
2024-04-18
生活服務(wù) | 144.35MB
2024-04-18
生活服務(wù) | 144.35MB
2024-04-18
生活服務(wù) | 144.35MB
2024-04-18
學(xué)習(xí)教育 | 24.26MB
2023-11-08
系統(tǒng)工具 | 6.78MB
2023-11-08
體育競技 | 88.6MB
體育競技 | 47.8MB
體育競技 | 310.89MB