專案經手了一套SDK,因為交接問題原始碼丟失,只留下了打包好的dll
分析這個dll的時候,發現一個問題
它匯出了多載函式
我分別用dumpbin分析了lib 和dll


從lib看,DECODE_Start和DECODE_Stop是引數串列不同的多載函式
但是dll分析,卻只匯出了唯一的函式
這套SDK在C#里被呼叫的時候,也確實用兩種引數串列都能呼叫成功
DECODE_Start Decode_Stop給不同的引數,都能成功
我記得dll是不能匯出同一引數名的多載函式,這是怎么做到的?
uj5u.com熱心網友回復:
用 Dependency Walker 看看, dll 匯出的原始函式名應該不是規整前的.uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
可以匯出吧,函式名一樣,引數串列不一樣啊,就跟匯出兩個不同的函式是一樣的:__declspec(dllexport) void fun(int a)
{
//to do
}
__declspec(dllexport) void fun(double a )
{
//to do
}
uj5u.com熱心網友回復:
多載函式肯定是允許匯出的, 除非是純c的呼叫約定, c++是支持的.uj5u.com熱心網友回復:
問下樓主, 專案沒有版本管理嗎? SVN,GIT之類的.如果沒有代碼, 這種dll 反編譯重新寫出來嗎?
uj5u.com熱心網友回復:
這么匯出來,dll的介面名稱會加上一些符號,和原來的介面名稱不一樣
uj5u.com熱心網友回復:
應該是用extern“C”純C呼叫的,不然匯出來的介面名稱不會這么規整
uj5u.com熱心網友回復:
DLL不能匯出同名(或者同序號)函式。就樓主的例子,真正匯出的可能是三個引數的那個函式,它在內部判斷了一下引數的有效性決定執行哪個。uj5u.com熱心網友回復:
多載本來就可以匯出。uj5u.com熱心網友回復:
怎么實作的??? 作業需要,我這邊試了下匯出多載引數,能匯出,不報錯。但是很難呼叫,畢竟不能把一堆符號給同事呼叫把。 另外 VS2010是不能用extern "C"多載的。C語言格式不支持多載。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/214386.html
標籤:C++ 語言
上一篇:如何把含有字母數字和符號的檔案,提取出數字坐標,并保存到TXT檔案中
下一篇:技術點12:檔案的上傳和下載
