VC++6.0如何创建与调用动态链接库(dll)
VC++支持的DLL:
DLL的編制與具體的編程語言及編譯器無關,動態鏈接庫隨處可見,VC++支持三種DLL:非MFC動態庫、MFC規則DLL和MFC擴展DLL。DLL導出函數(或變量、類)可供應用程序調用;DLL內部函數只能在DLL程序內使用,應用程序無法調用它們。?
導出函數的聲明方式:?
一種在函數聲明類型和函數名之間加上“_declspec(dllexport)”。?
另外一種采用模塊定義(.def)文件聲明,需要在庫工程中添加模塊文件,格式如下:?
LIBRARY 庫工程名稱?
EXPORTS 導出函數名?
DLL的調用方式:?
一種靜態調用,由編譯系統完成對DLL的加載和應用程序結束時DLL的卸載。?
另外一種動態調用,由編程者用API函數加載和卸載DLL(DLL加載—DLL函數地址獲取—DLL釋放)方式。?
示例:?
一、 函數—-創建動態鏈接庫(MFC規則DLL)?
1. New–projects–MFC AppWizard(dll)–Regular DLL using shared MFC DLL //取名為MFC_dll?
2. def文件中添加:函數名(Add_new)?
3. h文件中添加:外部函數聲明//求和函數,函數名為Add_new?
extern “C” __declspec(dllexport) int __stdcall Add_new(int a,int b);?
4. cpp文件中添加: 外部函數實現?
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文件即為所需
?
二、 函數—-調用動態鏈接庫(把MFC_dll.dll和MFC_dll.lib拷到工程所在目錄)?
//靜態調用(.h可以寫到.cpp文件中)?
1. new–projects–win32 console application–an empty project?
2. 添加h文件:(test.h)?
#pragma comment(lib,”MFC_dll.lib”) //告訴編譯器DLL相對應的lib文件所在路徑和文件名?
extern “C”_declspec(dllimport) int _stdcall Add_new(int a,int b);//聲明導入函數?
3. 添加cpp文件:(main.cpp)?
#include “test.h”?
int main()?
{?
cout<<Add_new(10,3);?
return 0;?
}
?
//動態調用?
#include <stdio.h>?
#include <windows.h>?
typedef int (* lpAddFun)(int ,int);//定義一個與Add_new函數接受參數類型和返回值均相同的函數指針類型?
int main()?
{?
HINSTANCE hDll;//句柄 www.2cto.com?
lpAddFun addFun;//函數指針?
hDll=LoadLibrary(“dllTest.dll”);//動態加載DLL模塊句柄?
if(hDll)?
{?
addFun=(lpAddFun) GetProcAddress(hDll,”Add_new”);//得到所加載DLL模塊中函數的地址?
if(addFun)?
{?
int result=addFun(2,3);?
printf(“%d”,result); } FreeLibrary(hDll);//釋放已經加載的DLL模塊?
}?
return 0;?
}
?from:http://www.2cto.com/kf/201112/112977.html
轉載于:https://www.cnblogs.com/zhangmo/archive/2012/07/24/2607032.html
總結
以上是生活随笔為你收集整理的VC++6.0如何创建与调用动态链接库(dll)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 18函数对象19command模式20函
- 下一篇: What's NEW in C++/CL