1. 程式人生 > 程式設計 >詳解VS2019 dumpbin檢視DLL的匯出函式

詳解VS2019 dumpbin檢視DLL的匯出函式

之前有人問過ViewDLL這些軟體在哪下載。實際上使用VS就可以檢視DLL的匯出介面。

1.先開啟VS內部的Power Shell

詳解VS2019 dumpbin檢視DLL的匯出函式

2.開啟以後應該如下圖所示,首先輸入dumpbin檢視下用法:

詳解VS2019 dumpbin檢視DLL的匯出函式

3.使用 /Exports 引數檢視DLL的匯出函式符號

詳解VS2019 dumpbin檢視DLL的匯出函式

順便再講下關於呼叫約定和函式符號的關係,即_stdcall,_cdecl.還有就是extern "c"對函式名符號的影響。

上面的Dll1.dll的匯出標頭檔案如下:

#pragma once

extern "C" {
	//extern "C" + _stdcall,函式匯出符號為 _CreateNativeManager@0 : _+函式名+@+傳參位元組數
	//由於_stdcall是被呼叫方清理堆疊,所以函式符號裡面包含了傳參的資訊
	_declspec(dllexport) NativeManager* _stdcall CreateNativeManager();
	_declspec(dllexport) void _stdcall ReleaseNativeManager();
	_declspec(dllexport) void(_stdcall ExSetLogHandler)(LogHandler handler);
	//extern "C" + _cdecl,函式匯出符號為 ReleaseNativeManager2 : 函式名 
	//由於_cdecl是呼叫方清理堆疊,所以只需要函式名就可以
	_declspec(dllexport) void(_cdecl ReleaseNativeManager2)();
}
//不使用extern的情況下,是C++的匯出方式,函式符號如下:
//?ReleaseNativeManager1@@YGXH@Z : ?+函式名+@@YG+返回型別+引數1型別...+@Z 
//如果是_cdecl @YG變為@YA
//如果沒有引數即引數為void,則以Z結尾,例如:
//?ReleaseNativeManager3@@YAXXZ : ?+函式名+@@YA+返回型別+XZ
//以上 X表示 void型別,H表示int引數型別
_declspec(dllexport) void(_stdcall ReleaseNativeManager1)(int num);
_declspec(dllexport) void(_cdecl ReleaseNativeManager3)();

如果匯入dll時發現沒有找到該函式,要根據dll的匯出約定方式設定對應的匯入方式,否則雖然函式名一樣但實際上符號是不同的。

到此這篇關於詳解VS2019 dumpbin檢視DLL的匯出函式的文章就介紹到這了,更多相關dumpbin檢視DLL的匯出函式內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!