我正在尝试使用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上使用Squeak5.0,它的资源目录中有SqueakFFIPrims.bundle。)
发布于 2015-10-18 20:47:44
您首先需要通过Monticello在映像中安装FFI。
FFI包位于http://source.squeak.org/FFI.html。
您需要先安装‘FFI-池’,然后安装‘FFI-内核’。然后,您可以加载‘FFI-测试’和‘FFI-示例’。
在映像中安装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'.https://stackoverflow.com/questions/33197626
复制相似问题