人生就是博官网

干货分享 | TSMaster RPC 基础入门:编程领导和使用注明

Table of Contents

介绍RPC?榍,我们先浅聊一下RPC的有关注明,以及在什么样的情况下必要相识本文 。

  1. RPC 注明
    远程过程挪用(RPC, Remote Procedure Call)是一种网络通讯和谈,使得法式能够挪用另一台推算机上的法式或服务,就像挪用本地的法式一样。RPC 的重要主张是简化散布式推算,使得开发者无需关注底层的网络通讯细节。

  2. 什么情况下必要相识此文章?
    用户基于 TSMaster 开发了对应的利用工程,想在表部法式中自动化节造TSMaster,能够查阅此文章。(备注:除了 RPC,TSMaster还提供了基于COM的接口,有需要可另行查阅有关文章。)

    本文合用程控模式:TSMaster1 节造 TSMaster2,或者其他过程节造 TSMaster 过程(使用 TSMaster.dll)合用于说话:C++ 、Python、 C#蹬罪言。
本文目录

01 | RPC的根基概想

客户端和服务器:

客户端:提议 RPC 要求的法式。

服务器:接管 RPC 要求并执行相应过程的法式。

?

代理:

客户端代理:封装要求并将其发送到服务器。

服务器代理:接管要求,解包并挪用本地过程,之后将了局返回给客户端代理。

?

通讯机造:

传输和谈:底层使用的和谈,好比 TCP、UDP。

数据序列化:将数据结构或对象转换成能够传输的体式,好比 JSON、XML、Protocol?Buffers。

?

RPC 工作流程:

  • 客户端挪用本地代理步骤:客户端挪用一个看似本地的步骤,但现实上这个步骤由客户端代理掌管处置;
  • 客户端代理序列化要求:将步骤名、参数等信息打包成新闻;
  • 新闻传输:客户端代理将新闻通过网络传输到服务器;
  • 服务器代理解包要求:接管到新闻后,服务器代理解包新闻并挪用现实的本处所法;
  • 执行步骤并天生响应:本处所法执行结束后,天生响应了局;
  • 服务器代理打包响应:服务器代理将了局打包成新闻并通过网络发送回客户端;
  • 客户端代理解包响应:客户端代理接管到响应新闻后,解包并将了局返回给客户端。

02、TSMaster RPC 利用

1|RPC 职能

基于 TSMaster 的 RPC 机造,用户能够在 TSMaster 上位机环境中搭建齐全的工程,涵盖从测试用例开发到程控设备治理、总线通讯配置以及节造板卡操作等一系列流程。通过这一机造,用户可能高效地在客户端远程节造 TSMaster 服务器,实现对系统变量、CAN 信号、LIN 信号、FlexRay 信号以及以太网(ETH)信号等的读写操作。此表,用户还能够挪用 TSMaster 服务器上界说的各类函数,进一步扩大和定造系统职能。

?

这种集成化的解决规划使得工程治理和自动化测试越发便捷和高效。用户无需在多个平台之间切换,即可实现蕴含硬件配置、信号监控、数据采集和测试执行等复杂工作。通过TSMaster 的 RPC 机造,用户在客户端即可实现对服务器的远程程控,简化了操作流程,提高了测试和开发效能,确保了系统的不变性和靠得住性。


TSMaster 提供了壮大的接口和丰硕的职能?,用户能够凭据需要矫捷组合使用,实现对各类信号和设备的精密节造和治理。这种架构不仅合用于研发测试阶段,也合用于出产环境中的实时监控和故障诊断,极大提升了工程项主张整体质量和效能。

?

不仅如此,TSMaster 的 RPC 机造支持多种拓扑结构,不仅能够实现客户端与服务器之间的一对一通讯,还可能实现以下复杂的通讯拓扑:

?

  1. 一对多 (One-to-Many):单个客户端能够同季节造多个 TSMaster 服务器,合用于必要同时治理多个测试环境或设备的情况。
  2. 多对一 (Many-to-One):多个客户端能够同时衔接到一个 TSMaster 服务器,这样分歧的用户或测试系统能够共享统一个服务器资源,实现协同工作和资源共享。
  3. 多对多 (Many-to-Many):多个客户端和多个服务器之间能够进行矫捷的通讯和节造,构建复杂的散布式测试和节造系统,合用于大型工程项目和散布式测试环境。
TSMaster 的 RPC 机造:一对多 (One-to-Many)、多对一 (Many-to-One)、多对多 (Many-to-Many)

这种矫捷的拓扑结构使得 TSMaster 可能适应各类复杂的工程需要,无论是在单一项目中还是在跨项目、跨地域的散布式测试中,都能提供高效、靠得住的解决规划。通过这种多样化的通讯模式,用户能够最大限度地利用硬件和软件资源,提高系统的扩大性和矫捷性,满足分歧规模和复杂度的工程项目需要。

03、TSMaster RPC 使用注明

基于RPC自身机造,TSMaster提供了相应接口,在必要被程控的工程中,激活RPC server端,为程控剧本提供相应资源。

1|激活 server

开启server端操作如下:

?

新建一个C剧本,在启动事务中输入下面代码,即暗示激活了当前工程的rpc server rpc_tsmaster_activate_server(true);

现实上,在 TSMaster v2024.06.05.1124 版本之后,所有TSMaster工程已经默认激活了RPC职能。

?

2|活 client

native_int h; //client 句柄

//参数 1 为提供 rpc 服务的 TSMaster 利用法式名

com.rpc_tsmaster_create_client(“TSMaster”,&h);

//激活 client 端

Com.rpc_tsmaster_activate_client(h,true);

?

3|批改 server 端数据

3.1 启动终场 server 工程

启动工程:

TSMaster 幼法式:

com.rpc_tsmaster_cmd_start_simulation(h);

API(C\C++\C#\Python):

rpc_tsmaster_cmd_start_simulation(h);

?

?

3.2 读写系统变量

设置系统变量:

TSMaster 幼法式:

com.rpc_tsmaster_cmd_write_system_var(h, “Var1”, “1.2345”);

API(C\C++\C#\Python):

rpc_tsmaster_cmd_write_system_var(h,”Var1″,”1.2345″);

?

获取系统变量:

TSMaster 幼法式:

com.rpc_tsmaster_cmd_read_system_var(h, “Var1”, “1.2345”);

API(C\C++\C#\Python):

rpc_tsmaster_cmd_read_system_var(h,”Var1″,”1.2345″);

?

?

3.3 读写 CAN 信号

设置 CAN 信号:

TSMaster 幼法式:

com.rpc_tsmaster_cmd_set_can_signal(h,”chnidx/net/node/msg/signal”, 1234)

API(C\C++\C#\Python):

rpc_tsmaster_cmd_set_can_signal(h,”chnidx/net/node/msg/signal”, 1234)

?

获取 CAN 信号:

double d = 0;

TSMaster 幼法式:

com.rpc_tsmaster_cmd_get_can_signal(h,”chnidx/net/node/msg/signal”, %d)

API(C\C++\C#\Python):

rpc_tsmaster_cmd_get_can_signal(h,”chnidx/net/node/msg/signal”, %d)

?

?

3.4 读写 LIN 信号

设置 LIN 信号:

TSMaster 幼法式:

com.rpc_tsmaster_cmd_set_lin_signal(h,”chnidx/net/node/msg/signal”, 1234);

API(C\C++\C#\Python):

rpc_tsmaster_cmd_set_lin_signal(h,”chnidx/net/node/msg/signal”, 1234);

?

获取 LIN 信号:

double d = 0;

TSMaster 幼法式:

com.rpc_tsmaster_cmd_get_lin_signal(h,”chnidx/net/node/msg/signal”, %d);

API(C\C++\C#\Python):

rpc_tsmaster_cmd_get_lin_signal(h,”chnidx/net/node/msg/signal”, %d);

?

?

3.5 读写 FlexRay 信号

设置 FR 信号:

TSMaster 幼法式:

com.rpc_tsmaster_cmd_set_flexray_signal(h,”chnidx/net/node/msg/signal”, 1234);

API(C\C++\C#\Python):

rpc_tsmaster_cmd_set_flexray_signal(h,”chnidx/net/node/msg/signal”, 1234);

?

获取 FR 信号:

double d = 0;

TSMaster 幼法式:

com.rpc_tsmaster_cmd_get_can_signal(h,”chnidx/net/node/msg/signal”, %d);

API(C\C++\C#\Python):

rpc_tsmaster_cmd_get_can_signal(h,”chnidx/net/node/msg/signal”, %d)

?

?

3.6 RPC?使用 TSMaster 系统函数

?

// 第一步:筹备挪用函数的输入参数

#define STR_BUFFER_SIZE 1024

char args[4][STR_BUFFER_SIZE];

char* pArgs[4] = {&args[0][0], &args[1][0], &args[2][0], &args[3][0]};

sprintf_s(pArgs[0], STR_BUFFER_SIZE, “%s”, “var1”);

sprintf_s(pArgs[1], STR_BUFFER_SIZE, “%d”, svtString);

sprintf_s(pArgs[2], STR_BUFFER_SIZE, “%s”, “string default value”);

sprintf_s(pArgs[3], STR_BUFFER_SIZE, “%s”, “this is a comment”);

?

// 步骤 2:挪用肆意 API

s32 ret;

ret = com.rpc_tsmaster_call_system_api(h, “app.create_system_var”, 4, STR_BUFFER_SIZE,

&pArgs[0]);

?

// 步骤 3:处置参数中的返回值(若是可用)

s32 i;

log(“API call result = %d”, ret);

for (i=0; i<4; i++){

log(“Argument %d: %s”, i+1, pArgs[i]);

}

?

上述代码等价与在 TSMaster 过程中使用 app.create_system_var 来创建系统变量,即:app.create_system_var(var1,svtString,”string default value”,”this is a comment”);

?

必要把稳的是,使用该方式挪用 TSMaster 内的系统函数,无法使用参数为指针类型(报文类型之表)的函数。

?

?

3.7 RPC?使用幼法式库函数

?

// 第一步:筹备挪用函数的输入参数

#define STR_BUFFER_SIZE 1024

char args[4][STR_BUFFER_SIZE];

char* pArgs[4] = {&args[0][0], &args[1][0], &args[2][0], &args[3][0]};

sprintf_s(pArgs[0], STR_BUFFER_SIZE, “%s”, “var1”);

sprintf_s(pArgs[1], STR_BUFFER_SIZE, “%d”, svtString);

sprintf_s(pArgs[2], STR_BUFFER_SIZE, “%s”, “string default value”);

sprintf_s(pArgs[3], STR_BUFFER_SIZE, “%s”, “this is a comment”);

?

//步骤 2:挪用肆意 API

s32 ret;TSMaster RPC 编程领导

ret = com.rpc_tsmaster_call_library_api(h, “mylib.create_system_var”, 4, STR_BUFFER_SIZE,

&pArgs[0]);

?

// 步骤 3:处置参数中的返回值(若是可用)

s32 i;

log(“API call result = %d”, ret);

for (i=0; i<4; i++){

log(“Argument %d: %s”, i+1, pArgs[i]);

}

04、TSMaster RPC 函数注明

基于RPC自身机造,TSMaster提供了相应接口,在必要被程控的工程中,激活RPC server端,为程控剧本提供相应资源。

1|rpc_tsmaster_create_client

函数名称
UInt32 rpc_tsmaster_create_client(const char*?ATSMasterAppName,const psize_t AHandle)
职能介绍
创建一个 TSMaster Rpc 客户端
挪用地位
初始化 tsmaster lib 库之后
输入参数
ATSMasterAppName: TSMaster server 端的利用法式名称;AHandle : TSMaster Rpc 客户端句柄
返回值
==0: 函数执行成功其他值:函数执行失败
示例
s32 h;rpc_tsmaster_create_client(“TSMaster1”, &h)

2|rpc_tsmaster_activate_client

函数名称

UInt32 rpc_tsmaster_activate_client(const size_t AHandle,const?bool AActivate)

职能介绍

激活或者停用一个 TSMaster Rpc 客户端

挪用地位

创建 TSMaster Rpc 客户端之后

输入参数

AHandle : TSMaster Rpc 客户端句柄

AActivate: true=激活,false=停用

返回值

==0: 函数执行成功

其他值:函数执行失败

示例

rpc_tsmaster_activate_client(h, true)

3|rpc_tsmaster_is_simulation_running

函数名称

UInt32 rpc_tsmaster_is_simulation_running(const size_t?AHandle,const pbool AIsRunning)

职能介绍

获取远程 TSMaster 仿真运行的状态

挪用地位

创建 TSMaster Rpc 客户端之后

输入参数

AHandle : TSMaster Rpc 客户端句柄

AIsRunning:远程 TSMaster 仿真运行的状态的数据指针

True=在运行,false=未运行

返回值

==0: 函数执行成功

其他值:函数执行失败

示例

bool b;

if (0 == com.rpc_tsmaster_is_simulation_running(h, &b)){

if (b){

// current simulation is running

}

}

?

4rpc_tsmaster_cmd_set_mode_realtime

函数名称

UInt32 rpc_tsmaster_cmd_set_mode_realtime(const size_t AHandle)

职能介绍

将 TSMaster Rpc server 配置为实时模式

挪用地位

创建 TSMaster Rpc 客户端之后,仿真运行之前

输入参数

AHandle : TSMaster Rpc 客户端句柄

返回值

==0: 函数执行成功

其他值:函数执行失败

示例

rpc_tsmaster_cmd_set_mode_realtime(h)

5rpc_tsmaster_cmd_set_mode_sim

函数名称

UInt32 rpc_tsmaster_cmd_set_mode_sim(const size_t AHandle)

职能介绍

将 TSMaster Rpc server 配置为仿真模式

挪用地位

创建 TSMaster Rpc 客户端之后,仿真运行之前

输入参数

AHandle : TSMaster Rpc 客户端句柄

返回值

==0: 函数执行成功

其他值:函数执行失败

示例

rpc_tsmaster_cmd_set_mode_sim(h)

?

6rpc_tsmaster_cmd_start_simulation

函数名称

UInt32 rpc_tsmaster_cmd_start_simulation(const size_t AHandle)

职能介绍

启动 TSMaster Rpc server 仿真

挪用地位

创建 TSMaster Rpc 客户端之后

输入参数

AHandle : TSMaster Rpc 客户端句柄

返回值

==0: 函数执行成功

其他值:函数执行失败

示例

rpc_tsmaster_cmd_start_simulation(h)

7rpc_tsmaster_cmd_set_can_signal

函数名称

UInt32 rpc_tsmaster_cmd_set_can_signal(const size_t AHandle,const

char* ASgnAddress,const double AValue)

职能介绍

在远程 TSMaster 上批改数据库中的 CAN 信号值

挪用地位

创建 TSMaster Rpc 客户端之后

输入参数

AHandle : TSMaster Rpc 客户端句柄

ASgnAddress:数据库中信号的蹊径

AValue: 信号值

返回值

==0: 函数执行成功

其他值:函数执行失败

示例

if(0==rpc_tsmaster_cmd_set_can_signal(h,

“0/CAN_FD_Powertrain/Engine/EngineData/EngSpeed”, 1234)){

// signal written

}

8rpc_tsmaster_cmd_get_can_signal

函数名称

UInt32 rpc_tsmaster_cmd_get_can_signal(const size_t AHandle,const

char* ASgnAddress,const pdouble AValue)

职能介绍

在远程 TSMaster 上获取数据库中的 CAN 信号值

挪用地位

创建 TSMaster Rpc 客户端之后

输入参数

AHandle : TSMaster Rpc 客户端句柄

ASgnAddress:数据库中信号的蹊径

AValue: 信号值指针

返回值

==0: 函数执行成功

其他值:函数执行失败

示例

double d;

if(0==rpc_tsmaster_cmd_get_can_signal(h,

“0/CAN_FD_Powertrain/Engine/EngineData/EngSpeed”, &d)){

// signal is retrieved

}

9rpc_tsmaster_cmd_set_lin_signal

函数名称

UInt32 rpc_tsmaster_cmd_set_lin_signal(const size_t AHandle,const

char* ASgnAddress,const double AValue)

职能介绍

在远程 TSMaster 上批改数据库中的 LIN 信号值

挪用地位

创建 TSMaster Rpc 客户端之后

输入参数

AHandle : TSMaster Rpc 客户端句柄

ASgnAddress:数据库中信号的蹊径

AValue: 信号值

返回值

==0: 函数执行成功

其他值:函数执行失败

示例

if(0==rpc_tsmaster_cmd_set_lin_signal(h,

“chnidx/net/node/msg/signal”, 1234)){

// signal written

}

10rpc_tsmaster_cmd_get_lin_signal

函数名称

UInt32 rpc_tsmaster_cmd_get_lin_signal(const size_t AHandle,const

char* ASgnAddress,const pdouble AValue)

职能介绍

在远程 TSMaster 上获取数据库中的 LIN 信号值

挪用地位

创建 TSMaster Rpc 客户端之后

输入参数

AHandle : TSMaster Rpc 客户端句柄

ASgnAddress:数据库中信号的蹊径

AValue: 信号值指针

返回值

==0: 函数执行成功

其他值:函数执行失败

示例

double d;

if(0==rpc_tsmaster_cmd_get_lin_signal(h,

“chnidx/net/node/msg/signal”, &d)){

// signal is retrieved

}

11rpc_tsmaster_cmd_set_flexray_signal

函数名称

UInt32 rpc_tsmaster_cmd_set_flexray_signal(const size_t??AHandle,const char* ASgnAddress,const double AValue)

职能介绍

在远程 TSMaster 上批改数据库中的 flexray 信号值

挪用地位

创建 TSMaster Rpc 客户端之后

输入参数

AHandle : TSMaster Rpc 客户端句柄

ASgnAddress:数据库中信号的蹊径

AValue: 信号值

返回值

==0: 函数执行成功

其他值:函数执行失败

示例

if(0==rpc_tsmaster_cmd_set_flexray_signal(h,

“chnidx/net/node/msg/signal”, 1234)){

// signal written

}

12rpc_tsmaster_cmd_get_flexray_signal

函数名称

UInt32 rpc_tsmaster_cmd_get_flexray_signal(const size_t?AHandle,const char* ASgnAddress,const pdouble AValue)

职能介绍

在远程 TSMaster 上获取数据库中的 flexray 信号值

挪用地位

创建 TSMaster Rpc 客户端之后

输入参数

AHandle : TSMaster Rpc 客户端句柄

ASgnAddress:数据库中信号的蹊径

AValue: 信号值指针

返回值

==0: 函数执行成功

其他值:函数执行失败

示例

double d;

if(0==rpc_tsmaster_cmd_get_flexray_signal(h,

“chnidx/net/node/msg/signal”, &d)){

// signal is retrieved

}

13rpc_tsmaster_cmd_write_system_var

函数名称

UInt32 rpc_tsmaster_cmd_write_system_var(const size_t?AHandle,const char* ACompleteName,const char* AValue)

职能介绍

从远程 TSMaster 按名称写入系统变量

挪用地位

创建 TSMaster Rpc 客户端之后

输入参数

AHandle : TSMaster Rpc 客户端句柄

ACompleteName:系统变量名称

AValue: 数据值

返回值

==0: 函数执行成功

其他值:函数执行失败

示例

rpc_tsmaster_cmd_write_system_var(h, “v1”, “1.2345”)

14rpc_tsmaster_cmd_read_system_var

函数名称

UInt32 rpc_tsmaster_cmd_read_system_var(const size_t?AHandle,const char* ASysVarName,const pdouble AValue)

职能介绍

从远程 TSMaster 按名称读取系统变量????

挪用地位

创建 TSMaster Rpc 客户端之后

输入参数

AHandle : TSMaster Rpc 客户端句柄

ASysVarName:系统变量名称

AValue: 数据值指针

返回值

==0: 函数执行成功

其他值:函数执行失败

示例

double d;

if (0 == rpc_tsmaster_cmd_read_system_var(h, “v1”, &d)){

log(“value = %f”, d);

}

15rpc_tsmaster_cmd_write_signal

函数名称

UInt32 rpc_tsmaster_cmd_write_signal(const size_t AHandle,const?TLIBApplicationChannelType ABusType,const char* AAddr,const double

AValue)

职能介绍

从远程 TSMaster 按名称写入信号值

挪用地位

创建 TSMaster Rpc 客户端之后

输入参数

AHandle : TSMaster Rpc 客户端句柄

ABusType:总线类型

AAddr:数据库中信号的蹊径

AValue: 数据值

返回值

==0: 函数执行成功

其他值:函数执行失败

示例

if(0==rpc_tsmaster_cmd_write_signal(h,APP_CAN,

“0/Powertrain/Engine/EngSpeed”, 1234)){

// value written

}

16rpc_tsmaster_cmd_read_signal

函数名称

UInt32 rpc_tsmaster_cmd_read_signal(const size_t AHandle,const?TLIBApplicationChannelType ABusType,const char* AAddr,const

pdouble AValue)

职能介绍

从远程 TSMaster 按名称读守信号

挪用地位

创建 TSMaster Rpc 客户端之后

输入参数

AHandle : TSMaster Rpc 客户端句柄

ABusType:总线类型

AAddr:数据库中信号的蹊径

AValue: 数据值指针

返回值

==0: 函数执行成功

其他值:函数执行失败

示例

double d;

if(0==rpc_tsmaster_cmd_read_signal(h,APP_CAN,

“0/Powertrain/Engine/EngSpeed”, &d)){

log(“signal value = %f”, d);

}

17rpc_tsmaster_delete_client

函数名称

UInt32 rpc_tsmaster_delete_client(const size_t AHandle)

职能介绍

删除 rpc client

挪用地位

创建 TSMaster Rpc 客户端之后

输入参数

AHandle : TSMaster Rpc 客户端句柄

返回值

==0: 函数执行成功

其他值:函数执行失败

示例

rpc_tsmaster_delete_client(h)

18rpc_tsmaster_cmd_stop_simulation

函数名称

UInt32 rpc_tsmaster_cmd_stop_simulation(const size_t AHandle)

职能介绍

终场远程 TSMaster 仿真

挪用地位

创建 TSMaster Rpc 客户端之后

输入参数

AHandle : TSMaster Rpc 客户端句柄

返回值

==0: 函数执行成功

其他值:函数执行失败

示例

rpc_tsmaster_cmd_stop_simulation(h)

19rpc_tsmaster_call_system_api

函数名称

UInt32 rpc_tsmaster_call_system_api(const size_t AHandle,const?char* AAPIName,const s32 AArgCount,const s32 AArgCapacity,const

char** AArgs)

职能介绍

Client 挪用 server 端使用系统函数

挪用地位

创建 TSMaster Rpc 客户端之后

输入参数

AHandle : TSMaster Rpc 客户端句柄

AAPIName:系统函数名称,”app.create_system_var”

AArgCount: 函数参数数量

AArgCapacity:参数字符串长度

AArgs:参数字符串数组

返回值

==0: 函数执行成功

其他值:函数执行失败

示例

// 第一步:筹备挪用函数的输入参数

#define STR_BUFFER_SIZE 1024

char args[4][STR_BUFFER_SIZE];

char* pArgs[4] = {&args[0][0], &args[1][0], &args[2][0], &args[3][0]};

sprintf_s(pArgs[0], STR_BUFFER_SIZE, “%s”, “var1”);

sprintf_s(pArgs[1], STR_BUFFER_SIZE, “%d”, svtString);

sprintf_s(pArgs[2], STR_BUFFER_SIZE, “%s”, “string default value”);

sprintf_s(pArgs[3], STR_BUFFER_SIZE, “%s”, “this is a comment”);

// 步骤 2:挪用肆意 API

s32 ret;

ret = com.rpc_tsmaster_call_system_api(h, “app.create_system_var”, 4,

STR_BUFFER_SIZE, &pArgs[0]);

// 步骤 3:处置参数中的返回值(若是可用)

s32 i;

log(“API call result = %d”, ret);

for (i=0; i<4; i++){

log(“Argument %d: %s”, i+1, pArgs[i]);

}

20rpc_tsmaster_call_library_api

函数名称

UInt32 rpc_tsmaster_call_library_api(const size_t AHandle,const?char* AAPIName,const s32 AArgCount,const s32 AArgCapacity,const??char** AArgs)

职能介绍

Client 挪用 server 端使用系统函数

挪用地位

创建 TSMaster Rpc 客户端之后

输入参数

AHandle : TSMaster Rpc 客户端句柄

AAPIName:幼法式库函数名称,”mylib.create_system_var”

AArgCount: 函数参数数量

AArgCapacity:参数字符串长度

AArgs:参数字符串数组

返回值

==0: 函数执行成功

其他值:函数执行失败

示例

// 第一步:筹备挪用函数的输入参数

#define STR_BUFFER_SIZE 1024

char args[4][STR_BUFFER_SIZE];

char* pArgs[4] = {&args[0][0], &args[1][0], &args[2][0], &args[3][0]};

sprintf_s(pArgs[0], STR_BUFFER_SIZE, “%s”, “var1”);

sprintf_s(pArgs[1], STR_BUFFER_SIZE, “%d”, svtString);

sprintf_s(pArgs[2], STR_BUFFER_SIZE, “%s”, “string default value”);

sprintf_s(pArgs[3], STR_BUFFER_SIZE, “%s”, “this is a comment”);

//步骤 2:挪用肆意 API

s32 ret;

ret = com.rpc_tsmaster_call_library_api(h, “mylib.create_system_var”,

4, STR_BUFFER_SIZE, &pArgs[0]);

// 步骤 3:处置参数中的返回值(若是可用)

s32 i;

log(“API call result = %d”, ret);

for (i=0; i<4; i++){

log(“Argument %d: %s”, i+1, pArgs[i]);

}

近期文章

颁发回复

×
×

产品入口: 产品增长到购物车

【网站地图】