1 个不稳定版本

0.2.0 2023年10月13日

#6 in #blade

Apache-2.0

110KB
214 代码行

blade-ink-ffi

一个包装库,提供对Blade Ink的C FFI支持。现在您可以从C调用Blade Ink Rust库了!

以下是从测试代码中提取的使用示例,该测试代码可以在tests/binc_test.c中找到

int main(void) {
    uint32_t ret = BINK_OK;
    BINK_Story *story = NULL;
    BINK_Choices *choices = NULL;
    char *err_msg = NULL;
    char *line = NULL;

    char *json_string = read_json_file("./inkfiles/TheIntercept.ink.json");
    if(json_string == NULL)
        exit(EXIT_FAILURE);

    ret = bink_story_new(&story, json_string, &err_msg);
    check_ret(ret, story, err_msg);
    free(json_string);

    bool end = false;

    while(!end) {
        bool can_continue;
        ret = bink_story_can_continue(story, &can_continue);
        check_ret(ret, story, err_msg);

        while (can_continue) {
            ret = bink_story_cont(story, &line, &err_msg);
            check_ret(ret, story, err_msg);
            puts(line);
            bink_cstring_free(line);
            
            ret = bink_story_can_continue(story, &can_continue);
            check_ret(ret, story, err_msg);
        }

        // Obtain and print choices
        size_t len = 0;
        ret = bink_story_get_current_choices(story, &choices, &len);
        check_ret(ret, story, NULL);
        //printf("Num. choices: %lu\n", len);

        if (len !=0) {
            print_choices(choices, len);
            printf("\n");
            bink_choices_free(choices);

            // Always choose the first option
            ret = bink_story_choose_choice_index(story, 0);
            check_ret(ret, story, NULL);
        } else {
            end = true;
        }

    }

    printf("Story ended ok.\n");

    finish(EXIT_SUCCESS, story, err_msg);
}

更多示例,请查看此仓库中的tests文件夹。

更多详情,请查看Blade Ink库源代码

下载

包含库的静态和动态链接库的编译包,可以从中发布部分下载。

如果您需要平台的库版本没有编译,您可以自己编译

$ rustup target add <your_platform_name>
$ cargo build --target <your_platform_name>

执行测试

我们可以使用tests文件夹中的tests/Makefile文件来执行C测试。从项目根目录执行

$ make -f tests/Makefile test

目前,测试只能在Linux或Macos上执行,您需要安装C工具链。

依赖项

~1.4–2.4MB
~49K SLoC