diff options
Diffstat (limited to 'example/test.cpp')
| -rw-r--r-- | example/test.cpp | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/example/test.cpp b/example/test.cpp new file mode 100644 index 0000000..dcba390 --- /dev/null +++ b/example/test.cpp @@ -0,0 +1,104 @@ +/************************************************************************* + > File Name: main.c + > Author: pxz + > Created Time: Thu 09 Jul 2020 07:08:40 AM CST + ************************************************************************/ +extern "C" +{ + #include<stdio.h> + #include<string.h> + #include<stdlib.h> +} +#include"../include/tsg_lua_interface.h" + +static char *get_file_to_buffer(const char *file, size_t *len) +{ + FILE *fp = fopen(file, "r"); + if (fp) + { + fseek(fp, 0, 2); + *len = ftell(fp); + fseek(fp, 0, 0); + if (*len == 0) + { + fclose(fp); + return NULL; + } + char *buff = (char *)malloc((*len) + 1); + int num = fread(buff, 1, *len, fp); + if (num != 0) + { + buff[num] = 0; + *len = num - 1; + fclose(fp); + return buff; + } + free(buff); + fclose(fp); + } + return NULL; +} + +int main(int argc, const char *argv[]) +{ + if (argc < 3) + { + printf("please input datafile and script."); + return -1; + } + const char *filename = argv[1]; + const char *script = argv[2]; + tsg_lua_handle L = NULL; + + size_t data_len = 0; + char *data = get_file_to_buffer(filename, &data_len); + + /* 初始化1个虚拟机 */ + printf("\n*********************tsg_lua_vm_create************************\n"); + printf("[C]:call tsg_lua_vm_create...\n"); + L = tsg_lua_vm_create(); + if (L == NULL) + { + printf("[C]:call tsg_lua_vm_create failed.\n"); + free(data); + return -1; + } + printf("[C]:call tsg_lua_vm_create success.\t lua:%p\n", L); + + char out[255]; + memset(out, 0, sizeof(out)); + size_t out_len; + size_t out_type; + printf("\n=============================file==================================\n"); + printf("\n*********************tsg_lua_exec_file************************\n"); + printf("[C]:call tsg_lua_exec_file, exec %s ...\n", script); + int ret = tsg_lua_exec_file(L, script, data, data_len, out, &out_len, &out_type); + if (ret < 0) + { + printf("[C]:call tsg_lua_exec_file failed.\n"); + free(data); + return -1; + } + printf("[C]:call tsg_lua_exec_file success.\n"); + printf("[C]:out_len:%zu\n", out_len); + printf("[C]:out_type:%zu\n", out_type); + switch(out_type) + { + case STRING: + printf("[C]:out_data:%s\n", out); + break; + case INTEGER: + printf("[C]:out_data:%ld\n", *(long int *)out); + break; + case BOOLEAN: + printf("[C]:out_data:%d\n", out[0]); + break; + } + + /* 关闭lua */ + tsg_destory_lua(L); + printf("[C]:Every day is good day!\n"); + + free(data); + return 0; +} |
