4

我尝试将 C# 与 prolog 接口我已使用此链接: 在此处输入链接描述

我已添加 SwiPlCs.dll 作为对我的项目的引用,然后使用文档中的第一个代码

using System;
using SbsSW.SwiPlCs;


namespace HelloWorldDemo

{

class Program
{
    static void Main(string[] args)
    {
        //Environment.SetEnvironmentVariable("SWI_HOME_DIR", @"the_PATH_to_boot32.prc");
        if (!PlEngine.IsInitialized)
        {
            String[] param = { "-q" };  // suppressing informational and banner messages
            PlEngine.Initialize(param);
            PlQuery.PlCall("assert(father(martin, inka))");
            PlQuery.PlCall("assert(father(uwe, gloria))");
            PlQuery.PlCall("assert(father(uwe, melanie))");
            PlQuery.PlCall("assert(father(uwe, ayala))");
            using (PlQuery q = new PlQuery("father(P, C), atomic_list_concat([P,' is_father_of ',C], L)"))
            {
                foreach (PlQueryVariables v in q.SolutionVariables)
                    Console.WriteLine(v["L"].ToString());

                Console.WriteLine("all child's from uwe:");
                q.Variables["P"].Unify("uwe");
                foreach (PlQueryVariables v in q.SolutionVariables)
                    Console.WriteLine(v["C"].ToString());
            }
            PlEngine.PlCleanup();
            Console.WriteLine("finshed!");
        }
    }
}

}

但总是有一个例外..据说:

指定的模块无法找到。(来自 HRESULT 的异常:0x8007007E

他们在 SWI-prolog 中谈到了这个错误:

如果找不到 libswipl.dll 或其依赖项之一,您将收到类似 System.IO.FileNotFoundException: Das angegebene Modul wurde nicht gefunden 的错误。(Ausnahme von HRESULT:0x8007007E)

我已将 libswipl.dll 从程序 bin 复制到我项目中的 bin/debug 文件夹中,但它仍然是同样的问题。

我该怎么办??谢谢

4

2 回答 2

3

您是否已声明 SWI_HOME_DIR ?应该指向 c`\Program Files\pl

C# 接口不适用于 Windows 7 64 位、Visual Studio 2010 专业版。似乎是一个错误,Uwe Lesta 应该尽快修复这个错误。

于 2012-11-26T08:13:31.180 回答
0

我有同样的错误,所以我下载了 SwiPlCs_1.1.60301.0 并且我将 SwiPlCs64.dll 的名称更改为 SwiPlCs.dll 并且我将它添加为 Visual Studio 中的参考并且它有效:) PS:我正在使用 Visual Studio 2010 和 Windows 7 64 位。希望这可以帮助 :)

于 2013-08-06T18:32:51.053 回答