【问题标题】:What is the syntax for the Squeak FFI in the new Squeak (5.0)新 Squeak (5.0) 中 Squeak FFI 的语法是什么
【发布时间】:2015-10-18 11:50:08
【问题描述】:

我正在尝试使用 Squeak Foreign Function Interface。 我能找到的所有信息似乎都不适用于新的 Squeak 5.0,因为当我尝试例如:

add: a to: b
    " ( int ) add (int a, int b) ; "
    < cdecl: int 'add' ( int a, int b ) module: 'mydll'>
    ^ self externalCallFailed

源自this page的:

apiInvalRect: aRect
    " ( void ) InvalRect (const Rect &star; badRect ) ; "
    < cdecl: void 'InvalRect' ( MacRect )  module: 'InterfaceLib'>   
    ^ self externalCallFailed.    

然后我得到一个错误,它期望在 &lt; 之后出现 &gt;

(我在 Windows 上使用 Squeak 5.0,其资源目录中有 SqueakFFIPrims.bundle。)

【问题讨论】:

  • 镜像中默认没有安装FFI,你有没有尝试安装?
  • @aka.nice 不是吗?我只看到我的图像在其目录中有一个 SqueakFFIPrims.bundle 并且我访问的所有网站都没有任何必须安装的信息(以及如何安装?),也没有在 squeakMap 中。如果您告诉我们如何安装它,我会非常高兴,我希望这也能解决语法错误(我猜插件也改变了解析规则?)
  • 我通常使用来自 source.squeak.org/FFI.html 的 Monticello 加载最新的 FFI 包,即 'FFI-Kernel-dtl.28.mcz' 'FFI-Tests-EstebanLorenzano.8.mcz' 'FFI-Examples -ar.1.mcz'。一定有一些安装程序脚本做同样的工作,但我不记得在哪里找到它,也许问谷歌......
  • 谢谢,我会试试 - 几分钟后报告
  • 我现在正在尝试解决一些依赖项...

标签: smalltalk ffi pharo squeak


【解决方案1】:

您首先需要通过 Monticello 在映像中安装 FFI。

FFI 包位于http://source.squeak.org/FFI.html

您需要先安装“FFI-Pools”,然后安装“FFI-Kernel”。然后您可以加载“FFI-Tests”和“FFI-Example”。

在映像中安装 FFI 后,正确的语法将如下所示:

add: a to: b
    " ( int ) add (int a, int b) ; "
    <cdecl: long 'add' ( long long ) module: 'mydll'>
    ^ self externalCallFailed 

您没有指定参数名称 - 它们隐含地与 smalltalk 方法处于相同的位置。

您必须将 int 替换为 long - 在受支持的 32 位平台上也是如此。

编辑要在 Squeak 中加载 FFI 包,您可以在工作区中键入并执行(执行)此操作:

(Installer repository: 'http://source.squeak.org/FFI')
    install: 'FFI-Pools';
    install: 'FFI-Kernel';
    install: 'FFI-Tests';
    install: 'FFI-Examples'.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多