Re: [問題] 使用外部dll
  我跟 windows 不是很熟,但就我所知,所有 win32api 不管是 gem 或是什麼,
  都是拿來讓你呼叫 Win32 API 的,而我看不出來你這邊想呼叫什麼 Win32 API?
  你想透過 Ruby 呼叫你所編譯的程式,這跟 Win32 API, 就我所知,是毫無關係的。
  我想你想做的事情,似乎比較接近 Ruby extension, 就是用 C 或 C++ 做出能讓
  Ruby 使用的程式。那麼通常會有兩種作法,一種就是真的照做 Ruby extension 的
  方式,你會需要 Ruby 的 header, 在你的程式寫 #include "ruby.h" 然後用他的
  方法定義能讓 ruby 呼叫的程式,最後做出一個 shared library, 可能在 windows
  上就是 .dll 吧?我不清楚。
  這種作法門檻比較高,如果沒有效率考量,或是不需要跟 ruby 做這麼緊密的
  連結的話,我不建議用這種方式。另外 ruby 是用 c 寫成的,你要用 c++ 的話
  可能會比較麻煩。可以參考這個 gem: http://rice.rubyforge.org/
  這會幫你包裝好一些 c++ <=> ruby 間的轉換。
  如果你只需要簡單的功能,或是說簡單的介面,那我比較推薦 ffi
  雖然老實講我不確定 windows 上能不能用... 試試 gem install ffi
  我隨手寫了一個示範:(請自行把兩行接成一個網址)
    https://github.com/godfat/sandbox/tree/
    8b9f74bee3db71aae9983f30b20f7dc7f45de2a2/mix/ffi
  具體內容是 mylib.c:
    int plus(int x, int y){ return x + y; }
  用你的方法 compile 成 shared library, 我的作法是:
    clang -shared mylib.c -o libmylib.so
  接著 ruby.rb 則是:
    require 'ffi'
    module MyLib
      extend FFI::Library
      ffi_lib './libmylib.so'
      attach_function :plus, [:int ,:int], :int
    end
  這邊我們告訴 ffi 要去讀 ./libmylib.so 這個 shared library,
  然後把 MyLib.plus 這個 method 直接對應到 libmylib.so 裡面的
  plus function. 要把各個參數的 type 和 return type 都寫出來。
  接著就能透過 MyLib.plus(1, 2) 去呼叫 c 裡面的 plus function,
  ffi 會自動把 c 的 3 轉換成 Ruby 的 3 (Fixnum)
  要呼叫 c 的 function, 這應該是最簡單的方式了。應該不能使用 c++,
  你真的要用 c++ 也只能再多做個 c 的介面了。
    *
  最後最後,給你一個誠心的建議不要用 dev-c++ 這種古董了.....
  都什麼年代了還在 gcc 3.4.2 實在是.. 七年前的東西了,
  GNU 五年前就沒有在維護了: http://gcc.gnu.org/releases.html
  我推薦 Code::Blocks http://www.codeblocks.org/
  這是我幾年前離開 windows 和 c++ 時在用的東西,
  看起來現在運作應該還良好才是。或是你可以直接用 MinGW 也很好:
  http://www.mingw.org/ 目前版本似乎是 gcc 4.5
--
Hear me exalted spirits. Hear me, be you gods or devils, ye who hold
dominion here:
I am a wizard without a home. I am a wonderer seeking refuge.
                              Sacrifice
--
※ 發信站: 批踢踢實業坊(ptt.cc) 
◆ From: 220.135.38.235
→
12/12 16:38, , 1F
12/12 16:38, 1F
→
12/12 17:32, , 2F
12/12 17:32, 2F
→
12/12 17:32, , 3F
12/12 17:32, 3F
→
12/12 17:36, , 4F
12/12 17:36, 4F
推
04/16 15:15, , 5F
04/16 15:15, 5F
→
04/16 15:15, , 6F
04/16 15:15, 6F
→
04/16 15:16, , 7F
04/16 15:16, 7F
→
04/16 15:16, , 8F
04/16 15:16, 8F
→
04/16 15:17, , 9F
04/16 15:17, 9F
→
04/16 15:18, , 10F
04/16 15:18, 10F
討論串 (同標題文章)
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章