2010-09-10 43 views
7

Có thể sử dụng bất kỳ cơ chế IPC nào để gọi một C++ api từ Adobe ActionScript không? Có ví dụ nào tốt không?Giao tiếp giữa C++ và ActionScript 3

Cập nhật: Tôi chủ yếu muốn nó cho các ứng dụng máy tính để bàn hiện nay tức là Adobe/hoặc runtimes desktop anyuone khác

Trả lời

0

Nó thực sự phụ thuộc vào những gì "API cuộc gọi" bạn tham khảo là. Nếu họ giới thiệu đến các cơ chế IPC, thường thì câu trả lời là là không. Bạn có thể biên dịch mã nhưng bạn sẽ không thực hiện để hỗ trợ các cuộc gọi này. Nếu bạn đang sử dụng ổ cắm, bạn có thể triển khai hỗ trợ cho điều đó trong Flash mặc dù Alchemy hiện không hỗ trợ API socket(). Số điện thoại này có trợ giúp không?

via

0

Một thời gian trước, tôi đọc về hỗ trợ ActiveX trong nháy mắt. Có lẽ bạn có thể viết một trình bao bọc ActiveX xung quanh C++ Api của bạn và gọi nó theo cách này. Với Air 2.0, bạn có khả năng khác - bạn có thể gọi các chương trình bên ngoài. Nếu bạn viết một wrapper dòng lệnh xung quanh api của bạn, bạn có thể gọi nó theo cách đó.

+0

tôi thích giải pháp Air 2.0 của bạn, bạn có thể hướng dẫn tôi đến một số mẫu mã đơn giản không? – iceman

+0

@iceman xem tại đây: http://mchristoff.com/2009/12/using-the-air-2-0-nativeprocess-api-to-control-mplayer/ http://www.adobe.com/ devnet/air/flex/quickstart/interacting_with_native_process.html –

2

Không phải từ trình phát flash, vì rất có khả năng sẽ vi phạm mô hình bảo mật của nó. Bạn có thể gọi C++ từ máy ảo Tamarin, ví dụ: mod-actionscript đang hoạt động. Một tùy chọn sẽ là chuyển các cuộc gọi của bạn đến máy chủ AS3, hãy gọi một số hàm C++ ở đó và gửi lại kết quả. Một tùy chọn khác là để biên dịch mã C++ thành AVM2 bằng cách sử dụng alchemy. Nhưng nếu bạn muốn gọi C++ để truy cập các tính năng trên máy khách không có sẵn từ trình phát flash (truy cập hệ thống tệp, UDP hoặc bất kỳ thứ gì), thì không có cách nào.

chỉnh sửa:
Ok, tôi giả sử có các tùy chọn sau:

  • có một cái nhìn tại các gói flash.accessibility và giải quyết nó với AS3 chỉ
  • tạo C++ daemon chạy ở chế độ nền , có thể có giao tiếp hai chiều với đèn flash qua
    • ổ cắm cục bộ (bạn kết buộc cổng trong daemon và ứng dụng flash sẽ kết nối với nó) với giao thức tùy chỉnh
    • a LocalConnection. Điều này có vẻ tốt hơn một chút từ quan điểm AS3, nhưng đòi hỏi một chút hacking trên mặt C++, vì bạn cần phải có được giữ của các kết nối và thực hiện các giao thức (con trỏ here)
  • sử dụng một thời gian chạy thay thế: adobe không khí , kẽm, swhx (yêu cầu haXe mặc dù và "backend" là neko, nhưng neko có thể dễ dàng được mở rộng)
+0

@ back2dos: do đó những gì bạn đang nói là tôi có thể sử dụng ngôn ngữ as3, nhưng một trình phát flash khác với Adobe ?? đó là những cái có sẵn? – iceman

+0

@iceman: vâng, có công viên đèn chiếu sáng, là nguồn mở, vì vậy tôi cho rằng, bạn có thể sửa đổi nó cho nhu cầu của bạn. Ngoài ra, tôi không thấy lựa chọn nào. Có lẽ, nếu bạn giải thích, những gì bạn đang cố gắng hoàn thành, tôi có thể giúp đỡ nhiều hơn. – back2dos

+0

@ back2dos: Tôi đang lên kế hoạch tạo các ứng dụng máy tính để bàn tương tác dễ tiếp cận hơn .. kết hợp giao diện người dùng giàu flash và sức mạnh mã hóa của C++ .. vì vậy tôi muốn sử dụng công cụ chuyển văn bản thành giọng nói để đọc cho người dùng những gì được viết trên màn hình .. – iceman

2

Nó không phải là có thể từ trình duyệt trình phát. Từ ứng dụng AIR, bạn có thể sử dụng API Socket để thực hiện IPC.

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/Socket.html?allClasses=1

+0

cảm ơn rất nhiều, tôi chủ yếu muốn nó cho các ứng dụng máy tính để bàn ngay bây giờ .. bạn có biết API cấp cao hơn API socket để giao tiếp giữa C++ và as3/mxml không? – iceman

+1

Theo tôi biết IPC có nghĩa là ổ cắm/chia sẻ mem/msgq vv Vì vậy, theo yêu cầu ur chỉ hỗ trợ điều là Ổ cắm. Mọi thứ cao hơn các IPC này sẽ chậm hơn và không cần thiết, ví dụ: mức độ cao hơn của ổ cắm là http, vv, mà bạn có thể không muốn sử dụng. – Seeker

2

Nếu bạn nhắm mục tiêu AIR runtime Adobe, bạn có thể tận dụng NativeProcess API đã được giới thiệu trong AIR 2.0.API này cho phép bạn sinh ra các quy trình bên ngoài và giao tiếp với chúng thông qua stdin và stdout.

Nếu bạn cảm thấy mạo hiểm và muốn làm điều gì đó không được tài trợ và hoàn toàn không được hỗ trợ, bạn có thể nhấn vào nội bộ LocalConnection bằng cách tương tác với tệp ánh xạ bộ nhớ của Flash Player. Có thêm chi tiết trên trang web osflash.org/localconnection. Cách tiếp cận này có một số hạn chế và không được hỗ trợ. Tôi không khuyên bạn nên.

Như đã đề cập trong một số câu trả lời khác, bạn cũng có thể sử dụng kết nối ổ cắm để gửi/nhận dữ liệu.

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