龙二少爷
2009-10-15 15:24
浏览 195

ruby /DL 升级到1.9.1的问题

下面几个小程序在ruby 1.8上都是顺利运行的,升级到1.9.1之后,发生许多method no defined的错误

[code]
ptr = DL.malloc(DL.sizeof('IIIIPPPP'))
[/code]

错误是: undefined method `sizeof' for DL:Module,在DL::Importer下是有一个sizeof,但是DL::Importer.sizeof('IIIIPPPP') 会报can not partser type..的错误

[code]
ptr = [0,1,0,0].pack('IIII').to_ptr
[/code]

这段代码也不能工作了,错误时to_ptr no define

有时候ruby一升级,就意味着许多东西要重新折腾,这些问题该如何fix呢?

不知道ruby有没有类似C#的条件编译,以便在不同版本下都顺利运行?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • xenocide 2009-10-21 02:15
    已采纳

    [code="ruby"]include DL
    CPtr.malloc SIZEOF_INT*4 + SIZEOF_VOIDP*4

    比较丑……如果找到更好方法请通知我……

    p = CPtr[[0,1,0,0].pack 'IIII']

    如果要地址整数,p.ptr,或者直接用 DL.wrap[/code]

    DL 在 1.9 被 yugui 姐姐重写了 ……
    刚开始时文档和注释都没有(因为要保持和代码一致,把文档放在最后做)

    比较好的参考是源代码目录中的 ext/dl/test 和 ext/win32ole/sample

    1.9 是 major version,不相容的部分也多,和 1.8 之间的区别就像 python 3 之于 python 2.5 ……

    某个总结:
    [url]http://www.elctech.com/articles/ruby-1-9-compatibility-a-three-step-ladder-to-bliss[/url]

    另外镐头书 1.9 版也值得参考。

    已采纳该答案
    打赏 评论

相关推荐 更多相似问题