讓我們假設我有以下功能:如何間接調用C函數
int func(int a, char* b, float c)
{
return 42;
}
我珍玩,如果有可能調用這個函數沒有:
- 顯式調用它(
func(1, "abc", 2.4)
) - 創建一個指向它的函數指針,然後通過函數指針調用它。
該函數是用C(或C++)編寫的,可能位於庫(Windows上的DLL)或當前應用程序中編譯的某處。現在讓我們假設沒有名稱修改問題。
但是,我瞭解以下內容:
- 函數的名稱。 (例如「
int
」,「char*
」,「float
」)。 - 它的返回類型
我接受任何建議,但我有點害怕一些較低級別的裝配黑客,因爲我想這是儘可能便攜。
我寧願一個C
解決方案,我想避免boost::bind
......
編輯 - 一些澄清...
的一個「通話中」的「功能」是一個腳本語言的編譯庫(DLL)。它會加載腳本語言(源文件),該語言具有「綁定」到外部函數(我試圖調用的那些函數),並且在腳本語言遇到「調用這個外部函數」時,它會嘗試調用那個外部函數可能在一個DLL ......或實際加載腳本語言的DLL的應用程序......
這些是標準的便攜式C中的唯一選項。但是,將會有特定於平臺的方法來訪問庫中的函數(例如,POSIX的'dlsym')。 –
在你的情況下,x86和AMD64是否具有可移植性? – athre0z
@athreoz在這個項目階段我只專注於這兩個:) – fritzone