詳解VS2019 dumpbin查看DLL的導出函數
之前有人問過ViewDLL這些軟件在哪下載。實際上使用VS就可以查看DLL的導出接口。
1.先打開VS內部的Power Shell
2.打開以后應該如下圖所示,首先輸入dumpbin查看下用法:
3.使用 /Exports 參數查看DLL的導出函數符號
順便再講下關于調用約定和函數符號的關系,即_stdcall,_cdecl.還有就是extern "c"對函數名符號的影響。
上面的Dll1.dll的導出頭文件如下:
#pragma once extern "C" { //extern "C" + _stdcall,函數導出符號為 _CreateNativeManager@0 : _+函數名+@+傳參字節(jié)數 //由于_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變?yōu)锧YA //如果沒有參數即參數為void,則以Z結尾,例如: //?ReleaseNativeManager3@@YAXXZ : ?+函數名+@@YA+返回類型+XZ //以上 X表示 void類型,H表示int參數類型 _declspec(dllexport) void(_stdcall ReleaseNativeManager1)(int num); _declspec(dllexport) void(_cdecl ReleaseNativeManager3)();
如果導入dll時發(fā)現(xiàn)沒有找到該函數,要根據dll的導出約定方式設置對應的導入方式,否則雖然函數名一樣但實際上符號是不同的。
到此這篇關于詳解VS2019 dumpbin查看DLL的導出函數的文章就介紹到這了,更多相關dumpbin查看DLL的導出函數內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++實現(xiàn)LeetCode(83.移除有序鏈表中的重復項)
這篇文章主要介紹了C++實現(xiàn)LeetCode(83.移除有序鏈表中的重復項),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下2021-07-07