2015-10-18 15 views
5

Tôi đang cố gắng sử dụng Giao diện chức năng ngoại giao Squeak. Mọi thông tin tôi đã có thể tìm thấy dường như không áp dụng đối với các mới Squeak 5.0 vì khi tôi thử ví dụ:Cú pháp cho Squeak FFI trong Squeak mới (5.0)

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

mà có nguồn gốc từ this page 's:

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

sau đó tôi nhận được lỗi mà nó mong đợi là > ngay sau <.

(Tôi đang sử dụng Squeak 5.0 trên Windows với SqueakFFIPrims.bundle trong thư mục nguồn của nó.)

+0

FFI không được cài đặt theo mặc định trong các hình ảnh, bạn đã thử bất cứ điều gì để cài đặt nó? –

+0

@ aka.nice Nó không phải là? Tôi chỉ thấy rằng hình ảnh của tôi có một SqueakFFIPrims.bundle trong thư mục của nó và rằng tôi không có trang web nào tôi truy cập có bất kỳ thông tin nào mà nó phải được cài đặt (và làm thế nào?), Cũng không có trong squeakMap. Tôi sẽ rất vui nếu bạn cho chúng tôi biết cách cài đặt và tôi hy vọng cũng giải quyết được lỗi cú pháp (tôi đoán plugin cũng thay đổi các quy tắc phân tích cú pháp?) – ben

+0

Tôi thường tải các gói FFI mới nhất bằng Monticello từ nguồn http: // .squeak.org/FFI.html sẽ là 'FFI-Kernel-dtl.28.mcz' 'FFI-Tests-EstebanLorenzano.8.mcz' 'FFI-Examples-ar.1.mcz'. Phải có một số kịch bản cài đặt mà làm công việc tương tự, nhưng tôi không nhớ nơi để tìm thấy nó, có thể hỏi google ... –

Trả lời

3

Trước tiên, bạn cần phải cài đặt FFI trong hình ảnh, qua Monticello.

Gói FFI được đặt tại http://source.squeak.org/FFI.html

Bạn cần cài đặt 'FFI-Pools' đầu tiên, sau đó 'FFI-Kernel'. Sau đó, bạn có thể tải 'FFI-Tests' và 'FFI-Example'.

Khi FFI được cài đặt trong hình ảnh, cú pháp đúng sẽ là một cái gì đó như thế này:

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

Bạn không chỉ định tên tham số - họ đang ngầm lấy vị trí tương tự như phương pháp Smalltalk.

Bạn phải thay thế từng giây một - nó giống nhau trên nền tảng 32 bit được hỗ trợ.

EDIT để tải gói FFI trong Squeak, bạn có thể gõ và thực hiện (làm điều đó) này trong một không gian làm việc:

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

Hoạt động. Cảm ơn một lần nữa. – ben

Các vấn đề liên quan