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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM