我有Program A
(它是開源的,但我不能修改它的源代碼)和DLL B
,它是動態加載的Program A
。在加載器中定義的C++動態dll加載和函數
有沒有辦法,使用Program A
中定義的功能DLL B
?
(可能有助於; Program A
有很多的.h頭文件,我需要的所有功能都在這...定義extern
)
我有Program A
(它是開源的,但我不能修改它的源代碼)和DLL B
,它是動態加載的Program A
。在加載器中定義的C++動態dll加載和函數
有沒有辦法,使用Program A
中定義的功能DLL B
?
(可能有助於; Program A
有很多的.h頭文件,我需要的所有功能都在這...定義extern
)
器extern定義生成可以在A.exe時鏈接使用符號。當你想獲得符號的地址(函數,變量,...)時,必須導出該符號。這通常不是爲一個程序完成的。
如果你的程序A.exe時不提供您的指針或手段來得到一個指向一個功能,您將無法使用該程序A.exe時的功能,在您的DLL B.
骯髒的黑客雖然...
如果您有很多這樣的功能,可能值得將它們導出到其他庫。例如,我正在處理可執行文件中只有200行的100000行代碼。
如果我理解正確,這將意味着修改'程序A'的源代碼,我不允許這麼做:-( – krisy 2011-04-20 12:06:14
如果您的程序聲明功能與__declspec(dllexport)的,或者如果你能夠與你的* .DEF文件編譯的程序,列出您在您的DLL乙需要那麼你可能會得到DLL導出導出函數的地址GetProcAddress Win32 API函數(傳遞可執行文件的模塊句柄,您可能通過名稱或其他方式獲得 - 請參閱GetModuleHandle,GetModuleHandleEx)
您是什麼樣的骯髒的黑客? – krisy 2011-04-20 11:22:37
類似於從映射文件中獲取函數的地址,將此硬編碼分配給DLL B中的函數指針,並祈禱總是調用相同版本的程序A.如上所述,這很髒。 – harper 2011-04-20 12:12:23
是的,真的很髒:-) – krisy 2011-04-20 14:23:38