在工作中經常需要寫dll並呼叫。本文寫出一種最簡單實用的dll動態呼叫的demo。
口訣:1個檔案2行單詞3步走
dll1個檔案2個單詞(1個檔案.def,2個單詞:export、test函式名);exe3步走。(申明函式,載入庫,指向函式)。
1、新建乙個空的exe專案;
2、新建乙個空的dll專案,並新增同乙個解決方案中;
3、建好後,設定下dll程式的輸入目錄;
dll編碼
1、在dll專案中,新增乙個.cpp檔案,乙個.def檔案。
2、在.cpp檔案中實現test函式;
int __stdcall test(int a,int b)
int __cdecl test2(int a,int b)
3、在.def檔案中,首行乙個單詞export;其餘行列舉出test函式名
exports
test
test2
exe編碼1、在exe專案中,新增乙個.cpp檔案。
2、在.cpp檔案中編寫**
#include "stdafx.h"
#include //第一步:將函式指標變數化 (把函式拷貝過來,加上笑臉變成函式指標,加上typedef變成型別,申明變數)
typedef int (__stdcall * test) (int a,int b);
typedef int (__cdecl * test2) (int a,int b);
test fntest;
test2 fntest2;
int main(int argc, char* argv)
fntest = (test)getprocaddress(hdll,"test");
fntest2 = (test2)getprocaddress(hdll,"test2");
//驗證函式結果
printf("ans=%d_%d!\n",fntest(9,5),fntest2(6,5));
return 0;
}
1、在exe專案中執行程式
dll:乙個def,def首行export,其它行列出函式名。
exe:三步走;
第一步:將函式指標變數化(首先把函式拷貝過來,加上(*)變成函式指標,加上typedef定義該函式指標型別;最後,申明乙個該型別的變數。)
第二步:載入庫檔案(需要windows.h標頭檔案)。
最後,使用該變數呼叫函式。
1、函式呼叫有三個約定方式 __stdcall、__cdecl、__fastcall;
1)windows的api都使用__stdcall,需要顯式呼叫。
2)stdcall和cdecl都是從右往左的約定方式,cdecl前兩個分別使用暫存器ecx、edx更快些;
2、該**極為簡單清晰,用起來很便捷。dll的函式都在def檔案中列舉出來了,能快速跳轉**。
C 呼叫動態DLL
c 呼叫動態鏈結庫方法 dllimport mydll.dll public static extern int add int a,int b private void btn add click object sender,eventargs e 如果需要呼叫同乙個dll檔案中的兩個不同函式,則...
C 動態呼叫DLL
本來是想實現控制台程式執行時自動全屏,但是只找到 vc下的實現方法 其中要使用兩個未公開的 win32 api 函式來訪問控制台視窗,這就需要使用 動態呼叫的方法,動態呼叫中使用的 windows api 函式主要有三個,即 loadlibrary getprocaddress 和freelibra...
C 動態呼叫Dll
利用反射進行動態載入和呼叫.assembly ass assembly.loadfrom dllpath 利用dll的路徑載入 載入dll後,需要使用dll中某類.type type ass.gettype typename 利用型別的命名空間和名稱獲得型別 需要例項化型別,才可以使用,引數可以人為...