這很可能是錯誤的標題,但我不知道如何描述它。我想要做的是從我的腳本語言(運行在虛擬機中)調用C++函數。我遇到了一些麻煩,想知道如何將參數傳遞給函數。動態C++函數參數
我最好的解決辦法,到目前爲止是這樣做:
void func(int a) {
// Start param copy
char c;
char* par_start = &c - sizeof(char) - getCurrentFuncParamOffset();
copyCurrentParams(par_start);
// End copy
// Code
}
然後,調用函數我第一次把它暴露在VM,將參數給它。這是一些縮短的代碼,但所有內容都被轉換爲void(*),以便將其存儲在散列表中。
EXPOSE(test, int);
vm.call("test", 12)
EXPOSE抓取指向函數測試的指針,並存儲它需要單個進入的地方。它將指針作爲void(*)()存儲在散列表中,以便當我想調用它時,我可以從VM撥打電話並解析它。然後,函數內部的代碼(我從問題中的宏中擴展而來)會將從調用傳遞給虛擬機的參數複製到函數的參數中。
這可行,但它不是最優雅的解決方案,尤其是因爲我將不得不爲每個我想爲腳本公開的函數調用宏。有更好的解決方案嗎?謝謝。
您在「然後我做」下的部分與上述部分沒有任何關聯。真的很難理解足夠的幫助。 – AndyG
@AndyG我很抱歉,希望編輯清除它 – BlueSpud
不完全。什麼是EXPOSE宏?什麼是「cppFunction」? void(* ptr)()=(void(*)());'? – AndyG