【问题标题】:Ruby Fiddle dll search PathRuby Fiddle dll 搜索路径
【发布时间】:2015-11-18 22:01:50
【问题描述】:

我正在尝试使用以下小提琴代码加载 dll:(如果有更简单的方法来加载 dll 并在其上调用可以解决我的问题的函数,我很高兴听到它)

require 'fiddle' unless defined?(Fiddle)
require 'fiddle/import' unless defined?(Fiddle::Importer)
extend Fiddle::Importer
dlload "Foo.dll"

dlload "C:/Folder/Foo.dll" 按我的意愿工作。但问题是 Foo.dll 是一个 c++ dll,需要在不同的位置使用其他几个 dll。

如何在没有完整路径的情况下仅调用 dlload "Foo.dll"。简而言之,如何将目录列表添加到 Ruby dll 搜索路径?

我尝试了以下方法:

$LOAD_PATH.unshift("C:/Folder")
ENV['RUBYLIB'] = "C:/Folder"
ENV['LD_LIBRARY_PATH'] = "C:/Folder"

ruby 解释器在另一个程序(Sketchup)中运行,所以我的环境受到限制。

【问题讨论】:

  • 根据我的经验,我无法让 Fiddle 在 MacOS 以外的任何系统上自动找到我的 DLL 文件。在 Linux 上,我过去使用过 pkg-config,但这对没有 pkg​​-config 的非开发人员不友好。然后我直接使用 ldconfig 。在 Windows 上,我编写了一个 ruby​​ 脚本,它在当前工作目录中搜索 DLL,然后是 Windows/System32,然后是 Windows 文件夹本身。这似乎是大多数 Windows 应用程序的搜索顺序。

标签: ruby dll libffi fiddle


【解决方案1】:

我得到的唯一解决方案是编写一个小的 kernel32.dll 库并从其中调用 AddDllDirectory。

【讨论】:

    猜你喜欢
    • 2011-01-20
    • 2011-04-09
    • 2011-01-25
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    相关资源
    最近更新 更多