詳解VS2019 dumpbin查看DLL的導(dǎo)出函數(shù)
之前有人問過ViewDLL這些軟件在哪下載。實際上使用VS就可以查看DLL的導(dǎo)出接口。
1.先打開VS內(nèi)部的Power Shell

2.打開以后應(yīng)該如下圖所示,首先輸入dumpbin查看下用法:

3.使用 /Exports 參數(shù)查看DLL的導(dǎo)出函數(shù)符號

順便再講下關(guān)于調(diào)用約定和函數(shù)符號的關(guān)系,即_stdcall,_cdecl.還有就是extern "c"對函數(shù)名符號的影響。
上面的Dll1.dll的導(dǎo)出頭文件如下:
#pragma once
extern "C" {
//extern "C" + _stdcall,函數(shù)導(dǎo)出符號為 _CreateNativeManager@0 : _+函數(shù)名+@+傳參字節(jié)數(shù)
//由于_stdcall是被調(diào)用方清理堆棧,所以函數(shù)符號里面包含了傳參的信息
_declspec(dllexport) NativeManager* _stdcall CreateNativeManager();
_declspec(dllexport) void _stdcall ReleaseNativeManager();
_declspec(dllexport) void(_stdcall ExSetLogHandler)(LogHandler handler);
//extern "C" + _cdecl,函數(shù)導(dǎo)出符號為 ReleaseNativeManager2 : 函數(shù)名
//由于_cdecl是調(diào)用方清理堆棧,所以只需要函數(shù)名就可以
_declspec(dllexport) void(_cdecl ReleaseNativeManager2)();
}
//不使用extern的情況下,是C++的導(dǎo)出方式,函數(shù)符號如下:
//?ReleaseNativeManager1@@YGXH@Z : ?+函數(shù)名+@@YG+返回類型+參數(shù)1類型...+@Z
//如果是_cdecl @YG變?yōu)锧YA
//如果沒有參數(shù)即參數(shù)為void,則以Z結(jié)尾,例如:
//?ReleaseNativeManager3@@YAXXZ : ?+函數(shù)名+@@YA+返回類型+XZ
//以上 X表示 void類型,H表示int參數(shù)類型
_declspec(dllexport) void(_stdcall ReleaseNativeManager1)(int num);
_declspec(dllexport) void(_cdecl ReleaseNativeManager3)();
如果導(dǎo)入dll時發(fā)現(xiàn)沒有找到該函數(shù),要根據(jù)dll的導(dǎo)出約定方式設(shè)置對應(yīng)的導(dǎo)入方式,否則雖然函數(shù)名一樣但實際上符號是不同的。
到此這篇關(guān)于詳解VS2019 dumpbin查看DLL的導(dǎo)出函數(shù)的文章就介紹到這了,更多相關(guān)dumpbin查看DLL的導(dǎo)出函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實現(xiàn)LeetCode(83.移除有序鏈表中的重復(fù)項)
這篇文章主要介紹了C++實現(xiàn)LeetCode(83.移除有序鏈表中的重復(fù)項),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07

