呼叫dll和編寫dll的幾種格式

2021-09-26 05:07:59 字數 1398 閱讀 7274

一共兩種

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...