2015-11-18 83 views
1

我想加载一个dll,使用下面的小提琴代码:(如果有更简单的方法来加载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的)内运行,所以我的环境受到限制。

+1

以我的经验,我一直无法让小提琴在除MacOS以外的任何系统上自动查找我的DLL文件。 在Linux上,我过去使用过pkg-config,但这对于那些不具有pkg-config的非开发者来说并不友好。然后我直接使用ldconfig。 在Windows上,我编写了一个ruby脚本,用于在当前工作目录中搜索DLL,然后搜索Windows/System32,然后搜索Windows文件夹本身。这似乎是大多数Windows应用程序的搜索顺序。 – jellymann

回答

0

我开始工作的唯一解决方案是编写一个小的kernel32.dll库,并在其中调用AddDllDirectory。