2013-04-15 61 views
2

要在VC++中加載DLL和調用函數,我們使用LoadLibrary和GetProcAddress,這需要方法的名稱改變。它是否實例化一個類對象然後調用該方法?DLL加載和調用類方法

如果它不,那麼我怎樣才能調用類中的方法,但實例化類的對象,然後調用一個方法?

什麼是進程加載.h文件中,負載類,實例化對象,然後調用的方法VC++

+0

引擎蓋下的C++方法只是第一個'this'參數的函數。 – Joulukuusi

+0

我想寫一個代碼,要求運行時的DLL文件的名稱和要執行的函數的名稱。所以我需要實例化類運行時並創建對象並使用該需要調用該函數。 這可能嗎? – Gaurav

+0

注意:我對C++內部不熟悉,所以這些只是我的想法。我認爲是的,你可以這樣做,但由於C++沒有標準化的ABI,每個編譯器可能(而且確實)將類方法和字段放在不同的偏移處。在特定的編譯器版本中,如果你有類定義,這可以工作。 – Joulukuusi

回答

1

其實是有一個very good example on CodeProject描述究竟是如何做到這一點。

編輯參考你的評論,如果你閱讀上面的文章,你會發現GetProcAddress()只會返回一個函數指針。如果要創建從DLL中導出的class的實例,則必須分配內存並強制系統調用該類的構造函數以在該實例中對其進行實例化。然而,一旦完成,我假設你可以通過使用剛創建的對象以正常方式調用類中定義的函數。

+0

嗨,但我有一個非常基本的問題。假設DLL A.DLL已出口, 'A類{ 公共函數B(){//一些代碼} }' 確實的LoadLibrary,GetProcAddress的instanciates'類A'和創建對象A,然後函數指針返回'對象AB()'? – Gaurav

+0

編輯回答,以解決您的評論 - 見上文。 –

+0

任何可以解決我的目的的代碼片段? – Gaurav