2016-11-03 73 views
0

我正在開發一個項目,試圖模塊化一些組件。其中之一是開窗。我試圖將輸入回傳給主EXE,而我通過一個用戶界面函數來執行此操作,該函數又調用主輸入系統類中的主要方法。後一類太複雜了,甚至沒有一個頭可用於兩個系統(取決於很多類)。DLL如何訪問EXE類?

反正,所以實際的問題是我無法訪問輸入接口類中的任何方法!

class WINDOW_EXPORT_CLASS GameWindow { 
private: 
    InputInterface *input; 
    virtual void SetInputPointer(InputInterface *); 
    ... 
}; 

這是在我的DLL/SO文件中,我可以訪問所有這些。但我無法訪問輸入的成員。 Bash崩潰與符號查找錯誤:

./bin/window.so: undefined symbol: _ZN14InputInterface16SetMouseInWindowEb 

有沒有人有任何想法如何解決這個問題?我的輸入接口類標題包含在兩側。這個類包含void函數,並且不會被導出(我不知道它是可以的,如果需要導出,請告訴我怎麼做?)提前致謝!

+1

你可能需要一個插件接口。 –

+0

其他用戶,1201ProgramAlarm,不得不寫答案,但我真的不知道你的意思,由和,InputInterface的頭是可執行文件,它的頭中的可執行文件和DLL都被引用。使功能虛擬解決了問題。 –

回答

1

可以讓你想從DLL虛擬訪問方法。然後,當你調用一個函數時,函數將在vtable(已經在EXE中設置)中查找,而不是通過導出的符號名稱查找。

這要求EXE創建輸入對象並將它們傳遞給DLL。如果DLL需要創建一個輸入對象,你需要從EXE導出係數法和動態定位它在運行時用調用LoadLibrary等

+0

確認:使每個功能虛擬做,工作,謝謝! –