【问题标题】:SWI-Prolog C++ interfaceSWI-Prolog C++ 接口
【发布时间】:2011-08-10 16:43:44
【问题描述】:

尝试在 prolog 中加载使用 swipl-ld 生成的 DLL 时出现错误 抛出异常的谓词是this

initialization(shlib:use_foreign_library('C:/Users/valquiria.duarte/Desktop/dlog-server-0.3-beta-source/dlog-server/output/hash_swi.dll', install)),

这个是个例外

ERROR: '$open_shared_object'/3: %1 is not a valid Win32 application.

【问题讨论】:

  • 我查看了 SWI-Prolog 的 use_foreign_library/2 谓词的当前文档,但我没有看到 install 在那里作为第二个参数的选项列出。我的阅读是 atom now 是唯一有意义的选项。您是否尝试过删除第二个参数?

标签: c++ windows prolog swi-prolog


【解决方案1】:

根据this note at ComputerHope,当文件丢失(或损坏)时,Windows 可能会报告此错误。文件路径似乎在对 use_foreign_library 的调用中完全指定,但值得仔细检查 DLL 所在位置的路径是否正确。

您报告错误消息的参数形式似乎有点奇怪,其中 %1 是实际文件名的占位符。如果这就是错误在您的计算机上出现的方式,则表明在异常详细信息被抛出处理程序链时解析失败。

如果消息确实包含实际路径和文件名,那么您应该确认它们的准确性以及文件在给定路径上的存在。看来你已经正确地调用了 use-foreign_library 使用 SWI-Prolog 在文件路径中使用正斜杠的首选语法来分隔目录。然而,产生错误的是 Window 的操作系统(更具体地说是dlopen() 的系统相关实现),并且生成的错误消息我希望包含包含反斜杠的文件路径和文件名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多