2015-11-18 29 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。