JS 跨语言交互-注册自定义回调函数

测试使用的JS文件, main.js

//main.js JS文件内容
//测试注册自定义回调函数
var ret = XC_Callback("XC_Callback");
alert(ret, "返回值");
ret = XC_Callback2("XC_Callback2",100);
alert(ret, "返回值");

C代码

//自定义回调函数1
void CALLBACK my_user_clallback(void *args)
{
int count = XJS_Callback_GetArgsCount(args); //获参数数量
if (count > 0)
{
if (XJS_Callback_IsString(args, 0)) //如果是字符串类型
{
const wchar_t* pString = XJS_Callback_GetString(args, 0); //获取第一个参数
XTRACEW(L"%s \n", pString); //打印信息
XJS_Callback_SetReturnValueString(args, pString); //设置返回值
XJS_FreeString(pString); //释放字符串指针
}
}
}
//自定义回调函数2
void CALLBACK my_user_clallback2(void *args)
{
int count = XJS_Callback_GetArgsCount(args); //获参数数量
if (count >= 2)
{
if (XJS_Callback_IsString(args, 0)) //如果第一个参数类型是字符串
{
const wchar_t* p = XJS_Callback_GetString(args, 0); //获取第一个参数
XTRACEW(L"%s \n", p); //打印信息
XJS_FreeString(p); //释放字符串指针
}
if (XJS_Callback_IsNumber(args, 1)) //如果第二个参数类型是数字
{
int number = XJS_Callback_GetNumber(args, 1); //获取第二个参数
XTRACEW(L"%d \n", number); //打印信息
}
}
XJS_Callback_SetReturnValueString(args, L"777");//设置返回值
}
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
XJS_InitJS();
//注册自定义回调函数
//参数1为函数名称, 提供给JS中调用, 参数2为绑定的回调函数
XJS_Callback_Reg(L"XC_Callback", my_user_clallback);
XJS_Callback_Reg(L"XC_Callback2", my_user_clallback2);
XJS_RunJS("main.js"); //运行JS文件测试
return 0;
}
void WINAPI XExitXCGUI()
炫彩_退出 退出界面库释放资源. 不可在dllmain()中卸载, 否则会死锁
Definition: App.cpp:572
void WINAPI XRunXCGUI()
炫彩_运行 运行消息循环,当炫彩窗口数量为0时退出.
Definition: App.cpp:564
BOOL WINAPI XInitXCGUI(BOOL bD2D)
炫彩_初始化 初始化界面库.
Definition: App.cpp:557