0

我是新来的计划/诡计。我想使用用户的 scm 脚本过滤 C 程序中的 C 结构数组。就像是:

struct Date {
    int year;
    int month;
    int day;
    };

struct Person {
    char name[20];
    Date birth;
    Date death;
    };

void printPersons(Person* persons, size_t n_persons, const char* scm_file) {
    size_t i;

    /* (...) compile script */

    for(i=0; i< n_persons;++i)
        {
        int accept = /** call guile script with &persons[i] */
        if( accept) printf("%s\n",persons[i].name);
        }
    /* dispose script */
    } 

现在我迷失在手册中。我应该从哪里开始?谢谢。

4

1 回答 1

1

要在 C 程序中调用方案脚本以使用 guile 进行评估,您需要使用 scm_with_guile()。然后,由 scm_with_guile() 执行的函数需要调用类似 scm_c_eval_string() (以方案语法评估字符串)或 scm_c_primitive_load() (以方案语法评估文件)之类的东西。这样的字符串和文件本身可以使用正常的方案语法调用 guile load 和 use-modules 过程。

如果你碰巧在使用 C++,这可能会给你一些想法:c++-gtk-utils/extension and extension source code。关于您的特定代码,您可以使用 Cgu::Extension::exec_shared() 的返回值初始化您的“接受”变量,该返回值使用 Cgu::Extension::integer_to_long() 翻译器调用,但由于“接受”是int 类型,在 64 位系统上,您需要允许 long to int 溢出。您还需要将您的 person 结构解构为脚本的单个值。

于 2016-01-11T18:21:55.200 回答