基於VS的DLL的建立和使用

2021-09-19 03:59:33 字數 1409 閱讀 3597

a:建立目標dll檔案

1.首先建立生成dll的專案,兩種途徑,基於mfc和基於win32控制台應用程式(示例)

2.檔案->新建->專案->win32控制台應用程式,程式型別選擇dll,勾選為空專案

3.選單欄專案->新增標頭檔案,myapi.h**如下

#ifndef _dll_api 

#define _dll_api _declspec(dllexport)

#else

#define _dll_api _declspec(dllimport)

#endif

extern "c" _dll_api int add(int a,int b);//自定義的函式介面

4.選單欄專案->新增對應的原始檔myapi.cpp,函式定義,**如下

#include "myapi.h" 

int add(int a,int b)

5.編譯通過,在相應工程名目錄下的debug目錄下會生成檔案,後面只需要myapi.dll和myapi.lib

b:dll檔案的呼叫的兩種方式

靜態呼叫lib檔案

1.新建專案mytest,先編譯,使專案具有debug目錄,將myapi.h存放在該目錄

2.將myapi.lib檔案放在與原始檔和標頭檔案相同的目錄下

3.將lib資源新增到專案中,在新專案的主函式中,新增**

#pragma comment(lib,"myapi.lib")
4.呼叫的時候,直接呼叫函式就好了

cout《動態呼叫dll檔案

一般而言,loadlibrary函式就可以,但是如果存在當前dll呼叫外部dll的情況,很容易出現getlasterror為126或193的錯誤,

所以建議使用loadlibraryex函式,避免dll依賴錯誤 

typedef int(*add)(int a,int b);

hmodule hdll = loadlibraryex(l"myapi.dll", null, load_with_altered_search_path);//vs2010 將__text置換為_t

if (hdll != null)

}else

freelibrary(hdll);

關於dll載入的三種方式

1.loadlibrary  一般是動態載入dll時(你並不需要對應的標頭檔案,和lib) 

2.#pragma comment 一般是靜態載入dll時(對應的標頭檔案、dll,和lib缺一不可,並且生產的exe沒有找到dll檔案就會導致「應用程式初始化失敗」) 

3.#import指令用於從乙個型別庫中結合資訊。該型別庫的內容被轉換為c++類,主要用於描述com介面

DLL的建立和使用

我們將建立的第一種型別的庫是動態鏈結庫 dll 使用 dll 是一種重用 的絕佳方式。您不必在自己建立的每個程式中重新實現同一例程,而只需對這些例程編寫一次,然後從需要該功能的應用程式引用它們即可。本演練涵蓋以下內容 建立新的動態鏈結庫 dll 專案。向動態鏈結庫新增類。建立引用動態鏈結庫的應用程式...

建立和使用DLL

首先建立個dll工程 win32控制台 dll工程 新增標頭檔案和cpp檔案,如下 ifndef dll test h define dll test h class declspec dllexport ctest endif include dll test.h include ctest ct...

VS2010下 DLL的建立和使用總結

建立和簡單的使用網上各種好人都已寫的很好了。就不去再費勁去做無用功了。此處推薦 總結一下 dll的呼叫方式可以分為隱式和顯式,各具優點和缺點。功能性函式匯出方式可以分為匯出符號匯出和def檔案裡列出匯出函式列表。注意的是def檔案列出匯出函式列表生成的dll2種呼叫方式都可以使用,但是顯式呼叫必須要...