Ruby ruby 调用外部 dll 异常

lyu302 · 2013年06月06日 · 最后由 sg552sg552 回复于 2014年06月17日 · 4240 次阅读

通过 Win32API 调用系统内部 dll(如:Kernel 等) 没有任何问题,但调用外部 dll 时异常,大概信息如下:

Win32API.new("test.dll", "GetSum", ["i","i"], "i").call(1,2)

(eval):3: [BUG] Segmentation fault ruby 1.9.3p194 (2012-04-20) [i386-mingw32]

[NOTE] You may have encountered a bug in the Ruby interpreter or extension libraries. Bug reports are welcome. For details: http://www.ruby-lang.org/bugreport.html

This application has requested the Runtime to terminate it in an unusual way.

具体信息见https://gist.github.com/aogail/3492796/raw/e992526c0f9e093b79a4085b9c5f37c0b00cdd07/ruby

google 发现些类似的问题,有说版本问题,也有说 ruby 代码问题。可是在 1.8.7、1.9.3、2.0 上都是一样的错误,代码也曾按照网上的方式修改过,就是没有解决方法,求解!

你的 test.dll 里,GetSum 是 C call 吧?win32api 都是用 stdcall 的,calling convention 不同硬调就会败。

require "dl"
require "dl/import"

module Test
  extend DL::Importer
  dlload 'test.dll'
  extern "int GetSum(int, int)"
end
Test.GetSum 3, 4

@lyu302 亲,你是 youku 的同学吗?陈香在找你。。。。 ^_^ 我是思维。有空联系我啊。[email protected]

需要 登录 后方可回复, 如果你还没有账号请 注册新账号