从Prolog调用C

从Prolog调用C,c,prolog,ffi,swi-prolog,C,Prolog,Ffi,Swi Prolog,我使用以下命令构建了dll: “C:\ProgramFiles(x86)\swipl\bin\swipl ld.exe”-o test new.cpp pro.pl 它创建了一个test.dll Prolog代码 :- module('test.dll', [ say_hello/1 ]). :- use_module(library(shlib)). :- initialization load_foreign_library(foreign('test.dll')). 这是C代码

我使用以下命令构建了dll:

“C:\ProgramFiles(x86)\swipl\bin\swipl ld.exe”-o test new.cpp pro.pl

它创建了一个test.dll

Prolog代码

:- module('test.dll', [ say_hello/1 ]).
:- use_module(library(shlib)). 
:- initialization load_foreign_library(foreign('test.dll')).
这是C代码

    #include <windows.h>
    #include <stdio.h>
    #include <SWI-Prolog.h>

    static foreign_t
    pl_say_hello(term_t to)
    { char *a;

      if ( PL_get_atom_chars(to, &a) )
      { printf("DLL TEST ");

    PL_succeed;
      }

      PL_fail;
    }

    install_t
    install_mylib()
    { PL_register_foreign("say_hello", 1, pl_say_hello, 0);
    }
#包括
#包括
#包括
静态外差
打个招呼(术语to)
{char*a;
if(PL_get_atom_chars(to,&a))
{printf(“DLL测试”);
成功;
}
PL_失败;
}
安装
安装_mylib()
{PL_register_foreign(“say_hello”,1,PL_say_hello,0);
}
现在我从Prolog调用C:

错误:导出的过程测试。dll:未定义say_hello/1


怎么了?请告诉我。

听起来像是在寻找一个函数名
安装
…这是你的整个C模块吗?根据SWI文档,它说确保其中一个文件提供一个全局函数install_mylib(),该函数使用调用PL_register_foreign()初始化模块。瞧,潜伏者,谢谢你,我编辑了我的帖子。浏览这个链接,它会回答你的问题。。