clips与C++的交互

本文介绍了如何将CLIPS源码加入VS C++项目,实现两者之间的交互。通过修改源码,解决编译问题,如缺少strtoll函数。详细步骤包括:将CLIPS源码C文件转为CPP,处理MFC工程的编译错误,以及调用CLIPS函数和定义CLIPS中的外部函数。示例展示了插入事实、定义规则以及调用C++函数的方法。
摘要由CSDN通过智能技术生成

clips嵌入vs项目中

有很多种方法,可以动态链接,静态链接,这些导入lib就可以直接调用clips的接口函数。
本文主要介绍直接将clips源码加入vs项目中,与c++项目整合
源码直接加入项目中后,就不仅可以调用clips的函数执行操作,还可以让clips调用c++项目中的函数,也即外部函数。
1、加入代码
clips源码是C文件,直接加入C++项目中肯定会有问题,下面针对会遇到的问题一一解决。
首先把clips源码除了main.c全部复制过来,.h文件放入头文件文件夹中,.c文件放入源码文件夹中,如何把所有.c文件的后缀名改为.cpp。
此时再编译,会发现提示没有strtoll()函数,这里就在报错的文件的公共引用的一个或几个.h文件中加入

if defined(_MSC_VER)
 #define strtoll _strtoi64 
 #endif

我在envrnmnt.h中加了,此时再编译,就不再报错。
再后面如果对应MFC工程有时会遇到报错
fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "StdAfx.h"' to your source?
这个问题一般发生在:通过添加文件的方式,添加了一些cpp文件到一个MFC的程序,但该cpp文件并不是MFC,而是标准的C++。
解决方案: 右键单击项目工程中的cpp文件,在菜单Project->Settings->C/C++->Precompile Header,设置为第一项:Not using precompile headers。
此时再编译,问题解决

2、调用clips函数
调用clips,需要什么功能,查看clips的函数接口,实现即可。
注意在项目文件中加#include “clips.h”

创建环境必不可少,defrule和deftemplate可以在EnvBuild中写,也可以提前写好用load导入
添加事实的话,需要有deftemplate,然后加入。

下面是一个例子,实现插入事实、定义规则、reset等操作,这里test.clp中提前定义了一个(pointData (value %d)(min %d)),采用envload导入的,然后调用EnvAssertString即可插入事实。

   //为后面assert事实做准备
   int v=5,m=2;
   char tempBuffer[50];
   sprintf(tempBuffer,"(pointData (value %d)(min %d))",value,min);



   void *theEnv;
   theEnv = CreateEnvironment();
   EnvLoad(theEnv,"test.clp");
   EnvBuild(theEnv,"(defrule hello"
                     "   =>"
                     "  (printout t \"Hello World.\" crlf)"
                     "  (printout t \"Hit return to end.\" crlf)"
                     "  (readline))");

   EnvReset(theEnv);
   EnvAssertString(theEnv,tempBuffer);
   EnvRun(theEnv,-
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值