У меня есть серия функций и объектов в C ++, которые будут называться/вызвать LUA, у меня уже есть существующий код, который делает именно это (используя MFC COM Dispatch) для VBScript (см. Внизу этого поста), поэтому я мог бы воссоздать/создать обертки для всех его в C ++, используя существующий C API LUA. Но учитывая количество функций и классов, которые займет гораздо больше времени, чем если бы я мог бы просто создать что -то похожее на диспетчеры COM и просто перенаправить зарегистрированные функции LUA прямо на существующие функции C ++. Обратите внимание, что все функции LUA в C API в основном имеют одинаковую подпись: < /p>
// accepts a Lua state with the input/s in the stack
// returns the number of outputs, pushes "actual" outputs onto the stack
int Func(lua_State* L)
< /code>
Представьте, что у меня есть, например, функции, которые выглядят так: < /p>
int Add(int x, int y)
double Divide(double x, double y)
void DoStuff(int x, double y, CString abc)
< /code>
Мне понадобится обертка (давайте назовем ее luawrapper :: genericfunction), которая будет выглядеть как приведенный выше вызов API Lua C, прочитайте различные типизированные входы из стека, вызовите соответствующую функцию с этими входами и возвращайте правильно типированный выход. < /p>
lua обычно деликации. Здесь я грубо обрисовываю синтаксис того, как будет использоваться Luawrapper :: genericfunction: < /p>
// have the Lua state redirect scripted calls to "Add" to this function:
// LuaWrapper::GenericFunction takes the Lua state, the function itself, the output type, and a list/string/whatever of the input types; then calls the function on those inputs and pushes the output onto the Lua state's stack
lua_register(L, "Add", Add); // vs:
lua_register(L, "Add", [](lua_State* L) { return LuaWrapper::GenericFunction(L, RealFunctions::Add, INT_TYPE, "INT INT"; });
< /code>
Проблема в том, что я не могу понять, как заставить входные данные работать и как вызвать совершенно общую функцию, которая может иметь в основном любое количество входов любого типа (они гарантируются, что они не являются ссылками, если они не являются объектами класса, для которых у меня есть план DO). Я знаю, что это возможно, так как API MFC COM в основном делает именно это для VBScript.// "Function" outputs an int, and takes two strings and a bool as inputs
// VT_I4 is basically an enum, VTS_??? are strings that get concatenated in this syntax
DISP_FUNCTION(CParentClass, "Function", Function, VT_I4, VTS_BSTR VTS_BSTR VTS_BOOL)
< /code>
затем написан как стандартная функция этого класса; разрешение VBScript вызвать его. < /p>
int CParentClass::Function(CString str1, CString str2, bool true_or_false)
У меня есть серия функций и объектов в C ++, которые будут называться/вызвать LUA, у меня уже есть существующий код, который делает именно это (используя MFC COM Dispatch) для VBScript (см. Внизу этого поста), поэтому я мог бы воссоздать/создать обертки для всех его в C ++, используя существующий C API LUA. Но учитывая количество функций и классов, которые займет гораздо больше времени, чем если бы я мог бы просто создать что -то похожее на диспетчеры COM и просто перенаправить зарегистрированные функции LUA прямо на существующие функции C ++. Обратите внимание, что все функции LUA в C API в основном имеют одинаковую подпись: < /p> [code]// accepts a Lua state with the input/s in the stack // returns the number of outputs, pushes "actual" outputs onto the stack int Func(lua_State* L) < /code> Представьте, что у меня есть, например, функции, которые выглядят так: < /p> int Add(int x, int y) double Divide(double x, double y) void DoStuff(int x, double y, CString abc) < /code> Мне понадобится обертка (давайте назовем ее luawrapper :: genericfunction), которая будет выглядеть как приведенный выше вызов API Lua C, прочитайте различные типизированные входы из стека, вызовите соответствующую функцию с этими входами и возвращайте правильно типированный выход. < /p> lua обычно деликации. Здесь я грубо обрисовываю синтаксис того, как будет использоваться Luawrapper :: genericfunction: < /p> // have the Lua state redirect scripted calls to "Add" to this function: // LuaWrapper::GenericFunction takes the Lua state, the function itself, the output type, and a list/string/whatever of the input types; then calls the function on those inputs and pushes the output onto the Lua state's stack lua_register(L, "Add", Add); // vs: lua_register(L, "Add", [](lua_State* L) { return LuaWrapper::GenericFunction(L, RealFunctions::Add, INT_TYPE, "INT INT"; }); < /code> Проблема в том, что я не могу понять, как заставить входные данные работать и как вызвать совершенно общую функцию, которая может иметь в основном любое количество входов любого типа (они гарантируются, что они не являются ссылками, если они не являются объектами класса, для которых у меня есть план DO). Я знаю, что это возможно, так как API MFC COM в основном делает именно это для VBScript.// "Function" outputs an int, and takes two strings and a bool as inputs // VT_I4 is basically an enum, VTS_??? are strings that get concatenated in this syntax DISP_FUNCTION(CParentClass, "Function", Function, VT_I4, VTS_BSTR VTS_BSTR VTS_BOOL) < /code> затем написан как стандартная функция этого класса; разрешение VBScript вызвать его. < /p> int CParentClass::Function(CString str1, CString str2, bool true_or_false)[/code]
Я бы хотел создать liboo.so из libfoo.a с использованием cmake.
Пока что у меня есть
include_directories(third-party/includes)
find_library(${thirdparty_LIBRARIES} foo PATHS third-party/lib)
add_library(boo SHARED empty.cpp)...
Отправьте мне документ, в котором вы показываете два вызова API (через Curl или Postman)-> один с поставщиком Retell и один с поставщиком VAPI и показывая, что в том же API, изменяя поставщик, который вы можете создать агента на обеих платформе....