新 Squeak (5.0) 中 Squeak FFI 的语法是什么

What is the syntax for the Squeak FFI in the new Squeak (5.0)

我正在尝试使用 Squeak 外部函数接口。 我能找到的所有信息似乎都不适用于新的 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.    

然后我收到错误消息,它期望在 < 之后出现 >

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

您首先需要通过 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'.