2015-11-18 9 views
1

Я пытаюсь загрузить DLL, используя следующий код скрипта: (Если есть более простой способ загрузить DLL и вызвать на нем функцию, которая решила бы мою проблему, я рад это услышать)Ruby Fiddle поиск 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" 

рубин интерпретатор работает в другой программе (Sketchup), поэтому моя среда ограничена.

+1

По моему опыту, я не смог заставить Fiddle автоматически находить файлы DLL в любой системе, кроме MacOS. В Linux я использовал pkg-config в прошлом, но это не относится к не-разработчикам, у которых не будет pkg-config. Затем я использовал ldconfig напрямую. В Windows я написал скрипт ruby, который ищет DLL в текущем рабочем каталоге, а затем Windows/System32, а затем сам папку Windows. Это похоже на порядок поиска большинства приложений Windows. – jellymann

ответ

0

Единственное решение, которое я получил, это написать небольшую библиотеку kernel32.dll и вызвать из нее AddDllDirectory.

 Смежные вопросы

  • Нет связанных вопросов^_^