2013-10-28 40 views
1

我必須調用外部庫中的函數,其參數的類型和數量以及返回類型是未知的。我如何使用dlsym在C++中調用該函數?如何使用dlsym()調用函數,如果我不知道返回類型和參數?

編輯:我如何調用函數使用dlsym(),如果我得到返回類型和數據類型的參數作爲字符串。

例如:客戶端將func名稱,返回類型和參數數據類型發送到服務器。服務器使用dlopen()動態加載對應的。現在我怎樣才能使用dlsym調用func?

在此先感謝

+1

如果你對此一無所知,你爲什麼認爲你需要給它打電話? –

+0

這聽起來像你正試圖重塑ffi(外部函數接口)。對於各種編程語言和各種許可證,有一些這樣的庫。你可能想看看我們甚至使用其中之一。 – John5342

回答

1

如何調用函數使用dlsym(),如果我不知道關於返回類型和參數?

然後你不能。如果您嘗試猜測這些,則通過指向不兼容函數類型的指針調用函數將導致未定義的行爲。

2

如果您有一個已知數量的參數組合及其類型可能會傳遞給正在討論的函數,您可以根據此信息實現一個調用,並在運行時解析包含類型和順序的字符串的參數被傳遞,然後跳轉到執行相應的調用。

如果你做事先不知道可能的類型和命令的參數要傳遞給有問題的函數,不可能調用它。

C不會做特別編譯,所以每個調用的參數和它們的類型都需要在編譯時知道,也就是在可執行文件被編譯時。

+0

「在運行時解析包含要傳遞參數的類型和順序的字符串,然後跳轉到相應調用的實現。」我不知道如何做到這一點。你可以幫我嗎? –

相關問題