我正在尝试使用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 ☆ badRect ) ; "
< cdecl: void 'InvalRect' ( MacRect ) module: 'InterfaceLib'>
^ self externalCallFailed.
然后我在>
之后得到了它期望<
的错误。
(我在Windows上使用Squeak 5.0,在其资源目录中使用SqueakFFIPrims.bundle
。)
答案 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'.