一共兩種
extern
"c"_declspec
(dllexport)dword sum
(int narg1,
char
*nar**2)
extern "c"
表示使用c的編譯方式編譯,c++格式
_declspec(dllexport)
將乙個函式申明為匯出函式
就申明了乙個匯出函式
但是這中建立的dll的匯出函式序號是連續的,我們不可控的。
也就是base是1,然後符號表從1 開始。
專案新建
新增乙個def檔案
def中的**
library "def匯出函式demo"
exports
test1 @1
test2 @5
test3 @8
dllmain中的**
// dllmain.cpp : 定義 dll 應用程式的入口點。
#include
"stdafx.h"
void
test3()
void
test2()
void
test1()
bool apientry dllmain
( hmodule hmodule,
dword ul_reason_for_call,
lpvoid lpreserved
)return true;
}
def裡面定義的就是函式名和序號對應關係在pe解析工具中,在addressofnameordinals 中對應的是減去base的值,可以用這個值直接去addressoffunction 表中找到這個偏移,就能拿到這個函式在dll中的位址了建立空專案
main.c**
#include
"stdio.h"
#include
intmain()
main.c**
#include
"stdio.h"
#include
intmain()
以序號查詢匯出函式位址 使用關鍵字makeintresource()
括號中值填序號表中對應值+base
例如你要匯入上面dll 序號為8的函式
這裡假如基值為1
標準動態dll編寫和呼叫
dll的編寫 include stdio.h include stdafx.h bool apientry dllmain handle hmodule,dword ul reason for call,lpvoid lpreserved case dll process detach 程序關閉時,...
Qt 編寫DLL 並呼叫
一 編寫dll庫 1 新建專案 選擇c library 選擇share library 改類名 如hellowadd 下一步 2 增加add方法如下 ifndef hellowadd h define hellowadd h include qt lib shared hellow global.h...
Qt 編寫DLL 並呼叫
一 編寫dll庫 1 新建專案 選擇c library 選擇share library 改類名 如hellowadd 下一步 2 增加add方法如下 ifndef hellowadd h define hellowadd h include qt lib shared hellow global.h...