動態鏈結的匯入的一些方法

2021-06-20 16:16:26 字數 2003 閱讀 4083

最近在學習動態鏈結的和com程式設計的一些內容,對dll程式設計的實現不是很難,但是在工程中匯入dll時總是會遇到這樣活著那樣的錯誤,弄了一天終於大致弄明白了動態鏈結匯入的方法以及其中的注意事項,這些細節的東西感覺很多文章都沒有提到。

#ifndef _dll_tutorial_h_

#define _dll_tutorial_h_

#include

#if defined dll_export

#define decldir __declspec(dllexport)

#else

#define decldir __declspec(dllimport)

#endif

extern "c"

#endif

該標頭檔案宣告了兩個函式,然後在dlltutorial.cpp檔案中對其實現

#include

#define dll_export

#include "dlltutorial.h"

extern "c"

decldir void function( void )     

}編譯檔案(vs2005中選擇生成解決方案即可),可以看到在該專案下面有乙個dll和lib檔案。

再新建乙個win32控制台程式,選擇空專案。下面我們將討論幾種不同的匯入動態鏈結庫檔案的方法。

1.隱式鏈結

(1)為實現隱式匯入需要將dll檔案和lib檔案cp到當前的專案資料夾下面,同時可能需要匯入標頭檔案,正是這個標頭檔案讓我糾結了一天,可以參考這個官方的說明。同時將標頭檔案cp到該目錄下。

在該專案中新增main.cpp檔案

#include

#include "dlltutorial.h"

int main()

[1]為了隱式鏈結dll,可以使用命令#pragma comment(lib,"dlllearn.lib")命令,這是一種方法

[2]選擇專案->專案屬性->配置屬性->聯結器->命令列 在附件選項中新增你需要匯入的lib檔案

編譯執行通過。我前面主要的問題就是沒有cp標頭檔案到該目錄下,好像很多文章都沒有說這一點,讓人蛋疼。

(2)還有一種方法,不用匯入標頭檔案。就是自己在main.cpp中自己宣告需要匯入使用的函式.該版本main.cpp檔案如下:

#include

#pragma comment(lib,"dlllearn.lib")

extern "c" _declspec(dllimport) void function();

extern "c" _declspec(dllimport) int add(int x,int y);

int main()

這樣也能成功。

2.顯式鏈結

顯式鏈結沒有什麼困難只是按部就班就可以了,首先利用loadlibary函式匯入dll檔案,然後利用getprocaddress函式找到需要使用的函式的位址,將其賦給新建的函式指標,就可以使用了。main.cpp檔案如下

#include

#include

#include

typedef int (*addfunc)(int,int);

typedef void (*functionfunc)();

int main()       

_addfunc = (addfunc)getprocaddress(hinstlibrary, "add");

_functionfunc = (functionfunc)getprocaddress(hinstlibrary, "function");

if ((_addfunc == null) || (_functionfunc == null))      

std::cout << _addfunc(23, 43) << std::endl;       

_functionfunc();

std::cin.get();

freelibrary(hinstlibrary);

return(1);

}

Razor語法中鏈結的一些方法

在razor中,有html.actionlink和 url.action來呈現鏈結。它們有什麼區別呢。能分清了,就知道在什麼情況之下使用它們了。首先來看html.actionlink,這個方法過載挺多的,最終生成乙個標記。如果沒有指定controller,則預設為本頁面對應的controller。方...

Razor語法中鏈結的一些方法

在razor中,有html.actionlink和 url.action來呈現鏈結。它們有什麼區別呢。能分清了,就知道在什麼情況之下使用它們了。首先來看html.actionlink,這個方法過載挺多的,最終生成乙個標記。如果沒有指定controller,則預設為本頁面對應的controller。方...

興趣使然的一些鏈結

python資料結構和演算法 常用演算法總結 1 了解本真的rest架構風格 restful api設計指南 理解restful api架構 資料庫訪問效能優化 基於oracle,關係型資料庫可參考 mysql設計優化 簡歷效果 其作者的部落格 貌似為原版的簡歷 python最佳實踐指南!stack...