Re: [問題] 使用外部dll

看板Ruby作者 (godfat 真常)時間12年前 (2011/12/12 04:02), 編輯推噓1(109)
留言10則, 3人參與, 最新討論串2/2 (看更多)
我跟 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 17:32, , 2F
12/12 17:32, 2F

12/12 17:32, , 3F
還在 gcc 3.4.2, 看來作者連網站都換了嗎?還是換人更新..?
12/12 17:32, 3F

12/12 17:36, , 4F
看起來真的是不同人,難怪網站沒辦法更新,名字應該換的
12/12 17:36, 4F

04/16 15:15, , 5F
C++ IDE的話,mac上推薦用xcode直接寫(雖然有人討厭xcode
04/16 15:15, 5F

04/16 15:15, , 6F
),unix-like的話netbeans上次感覺不錯。
04/16 15:15, 6F

04/16 15:16, , 7F
monodevelop上次寫c#感覺很猛,很有visual studio express
04/16 15:16, 7F

04/16 15:16, , 8F
整盤搬來的味道,但不知能不能拿來當cpp ide
04/16 15:16, 8F

04/16 15:17, , 9F
win的話就還是用VC寫吧。找不到比Visual Studio方便的IDE了
04/16 15:17, 9F

04/16 15:18, , 10F
用textmate.sublimeeditor之類的東西配gcc也很穩就是。
04/16 15:18, 10F
文章代碼(AID): #1EvGmwBQ (Ruby)
文章代碼(AID): #1EvGmwBQ (Ruby)