我有一個奇怪的問題。我有兩個DLL,我們稱它們爲DLL-A和DLL-B。功能從一個DLL調用另一個DLL的同名功能
DLL-A有一個名爲f1()
的函數,DLL-B也具有同名函數f1()
。現在在DLL-A中,f1()
像這樣調用DLL-B的f1()
。
DLL-A:
f1()
{
f1(); //this is DLL-B function, but having the same name
}
現在我的問題是,會不會是f1()
從DLL-A遞歸調用?
我有一個奇怪的問題。我有兩個DLL,我們稱它們爲DLL-A和DLL-B。功能從一個DLL調用另一個DLL的同名功能
DLL-A有一個名爲f1()
的函數,DLL-B也具有同名函數f1()
。現在在DLL-A中,f1()
像這樣調用DLL-B的f1()
。
DLL-A:
f1()
{
f1(); //this is DLL-B function, but having the same name
}
現在我的問題是,會不會是f1()
從DLL-A遞歸調用?
他們這樣寫你的方式f1在f1內不會調用DLL-B而是無限遞歸。如果你想調用DLL-B功能,你將不得不使用GetProcAddress的
的f1()
的函數體內調用自身,導致無限遞歸,因爲你嫌。一些可能的解決方案:
GetProcAddress
。這允許你調用任何你喜歡的導入函數。如果鏈接導出相同符號的兩個對象文件,則應該會出現編譯器或鏈接器錯誤。就像「符號f1()的多重定義」。
也就是說,如果您在一個dll中包含聲明其他函數或將兩個二進制文件鏈接在一起的頭文件。
要解決此問題,請將函數置於命名空間中。
您可以將DLL-A中函數的名稱更改爲A_f1
。
A_f1()
{
f1() //this calls DLL-B's f1
}
在你DEF文件,寫
EXPORTS
f1 = A_f1
這說:「我在內部調用A_f1
該函數應名f1
下出口到其他組件。」這樣,每個使用DLL-A並調用f1
(期望獲得函數A)的人都會得到A_f1
。
我假設重命名導出的函數是不可能的。如果有可能,那麼這是一個更清潔的解決方案。 (我的猜測是,這是不可能的,因爲你正在試圖破解視頻遊戲。)
關於黑客入侵視頻遊戲的好評 – Gabrielius
也許你可以通過改變名稱:用於GetProcAddress的
#pragma comment(linker, "/export:[email protected]")
+1。 –