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

时间:2015-10-18 11:50:08

标签: smalltalk ffi pharo squeak

我正在尝试使用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。)

1 个答案:

答案 0 :(得分:3)

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

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

您需要安装&#39; FFI-Pools&#39;首先,然后是FFI-Kernel&#39;。然后你可以加载FFI-Tests&#39;和&#39; FFI-示例&#39;。

在图像中安装FFI后,正确的语法将是这样的:

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

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

你必须用long替换int - 它在支持的32位平台上是相同的。

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

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