美文网首页
CLIPS专家系统与C++的交互

CLIPS专家系统与C++的交互

作者: 芳满楼 | 来源:发表于2016-09-22 21:50 被阅读0次

CLIPS专家系统与C++的交互

更多文章参见个人网站

最近研究了一下在windows下使用C++嵌入CLIPS专家系统,这里只是用了引用DLL的方式实现的,分别使用了显示链接和隐式链接两种方式。当然还有其他的方式可以实现(直接调用CLIPS的C源码,不过这种方式略显麻烦,其中涉及了许多C/C++编译的兼容性,过一段时间在研究一下),不过这里的使用方式基本满足了编写MFC、QT等人机交互界面程序的要求,是大学论文的一把利器(不明白显式链接、隐式链接的同学请自行Google!)

下面开始介绍嵌入的过程!!!

首先就是准备三个文件:

CLIPSWin32.dll

CLIPSWin32.lib

CLIPSWin32.h

———————————分割———————————

先把CLIPS知识库贴上

(defrule hello

=>

(printout t "Hello World." crlf)

(printout t "Hit return to end." crlf)

(readline)

)

1. 显式链接的方案

显示链接只需要第一个文件即可,也就是CLIPSWin32.dll

首先,使用DLL输出函数查看器,找到我们需要使用的函数名称(对于没有.h文件的DLL),我们这里有.h文件,所以就偷个懒,直接看一下里面的函数和参数类型就可以了。

我们要使用到的函数分别是:

__CreateEnvironment()

__EnvLoad()

__EnvReset()

__EnvRun()

__DestroyEnvironment()

注意:__这里是两个_

其次,开始手动加载DLL

HMODULE dll_handle;

dll_handle = LoadLibrary("CLIPSWin32.dll");

获得每个函数的入口地址

__CreateEnvironment = (CreateEnvironmentPtr)

GetProcAddress(dll_handle,"__CreateEnvironment");

__EnvLoad = (EnvLoadPtr)

GetProcAddress(dll_handle,"__EnvLoad");

__EnvReset = (EnvResetPtr)

GetProcAddress(dll_handle,"__EnvReset");

__EnvRun = (EnvRunPtr)

GetProcAddress(dll_handle,"__EnvRun");

__DestroyEnvironment = (DestroyEnvironmentPtr)

GetProcAddress(dll_handle,"__DestroyEnvironment");

最后,就是调用函数,运行CLIPS环境了

theEnv = __CreateEnvironment();

__EnvLoad(theEnv,"hello.clp");

__EnvReset(theEnv);

__EnvRun(theEnv,-1);

__DestroyEnvironment(theEnv);

当然,结束的时候不要忘了释放内存

FreeLibrary(dll_handle);

2. 隐式链接的方案

需要的文件为

CLIPSWin32.dll

CLIPSWin32.lib

CLIPSWin32.h

三个文件最好都拷贝到程序根目录下

首先,在程序里包含CLIPSWin32.h,并且在项目里添加CLIPSWin32.lib。

注意,CLIPSWin32.h为C语言编码,所以包含时添加“extern “C””。

其次,调用函数

theEnv = __CreateEnvironment();

__EnvLoad(theEnv,"hello.clp");

__EnvReset(theEnv);

__EnvRun(theEnv,-1);

__DestroyEnvironment(theEnv);

最后,结束,由于是隐式链接,不需要释放资源了

相关文章

  • CLIPS专家系统与C++的交互

    CLIPS专家系统与C++的交互 更多文章参见个人网站 最近研究了一下在windows下使用C++嵌入CLIPS专...

  • CLIPS与MFC之间的交互方法总结

    CLIPS与MFC之间的交互方法总结 更多文章参见个人网站最近,碰到很多同学询问MFC如何与CLIPS进行交互,简...

  • 人工智能技术专家系统

    什么是专家系统?   专家系统被定义为一种交互式可靠的基于计算机的决策系统,它使用事实和启发式方法来解决复杂的决策...

  • module.modulemap

    swift 有UNSafePoint的概念,但是不能够与C/C++直接交互,但是对于C/C++模块操作就需要进行一...

  • SWIG 实现 Python 调用 C/C++

    Mac - SWIG 安装 - CSDN SWIG 和 Python——c/c++与脚本交互 - CSDN 使用S...

  • Android Studio使用JNI实例

    1、新建一个类,声明native方法。这个类是java与C/C++交互的中介,方法由java声明,由C/C++实现...

  • Lua与C++的交互

    参考: https://blog.csdn.net/v_xchen_v/article/details/77249...

  • C#与C/C++的交互

    C#与C++交互,总体来说可以有两种方法: 利用C++/CLI作为代理中间层 利用PInvoke实现直接调用 第一...

  • Lua api(一)

    前言# 最近看了一下Lua与C++的交互,发现只是写lua而不了解lua与C++相互调用的过程,确实是一件苦恼的事...

  • Drools入门

    规则引擎 相关介绍 规则引擎起源于基于规则的专家系统,而基于规则的专家系统又是专家系统的其中一个分支。专家系统属于...

网友评论

      本文标题:CLIPS专家系统与C++的交互

      本文链接:https://www.haomeiwen.com/subject/iizaettx.html