2016-01-19 44 views
1

我目前在一個情況下,我需要調用很多已在運行時提取的函數指針。問題是在編譯時參數是未知的。C後期綁定與未知的參數

但是,在運行時我收到的數據讓我知道函數的參數,我甚至可以將參數存儲在char *數組中。問題是我沒有一個函數指針模型來投射它。

在高級語言中,我知道有像「InvokeMethode(String name,Byte [] args)」這樣的函數來解釋字節數組的參數。由於C中不存在反射,我不希望用函數指針來看這個。

我想到的一個解決方案(它真的很糟糕)是在編譯時創建一個函數指針模型,它將以「硬編碼方式」將ptr轉換爲正確的類型以便像這樣使用:

void callFunc64Bits(void* funcPtr,long long args); 
void callFuncVoid(void* funcPtr); 

問題是,我將不得不像這樣創建100個函數,這將正確地投射指針。

有沒有辦法更有效地做到這一點?

非常感謝!

+0

因此,使所有的功能,作爲參數'void *',並很高興.. –

+0

嗯,我不是誰寫的功能,我需要加載在動態的方式 – Chaore

+0

然後,我擔心現在有這樣做的方式,除非您將關於參數類型的信息一起傳遞,然後使用包裝來調用函數。 –

回答

0

這是一個難以解決的問題,不幸的是,好的或簡單的答案。

看到這個前SO問題:Run-time parameters in gcc (inverse va_args/varargs)

見該C FAQ問題:http://c-faq.com/varargs/invvarargs.html

由C常見問題列表維護見本集的 「古怪的想法」:http://c-faq.com/varargs/wacky.html


補遺:看到這個前SO的問題:How to call functions by their pointers passing multiple arguments in C?

...其中提到「libffi」 :http://sourceware.org/libffi/

+0

在我的情況下,libfii似乎是一個相當不錯的問題解決者。我在等待更多答案,但它可能是最終的解決方案。謝謝!! – Chaore