2009-12-03 52 views
7

cảm ơn bạn đã đọc câu hỏi này.Có công cụ nào để tích hợp Java và C++ không?

Tôi đang làm bài tập về nhà này cần một GUI làm đầu cuối để kết hợp với mã kết thúc ngược được viết bằng C++.

Tôi muốn viết GUI giao diện người dùng này trong java làm tính năng đa nền tảng và các thành phần đồ họa mạnh mẽ.

Có cách nào tốt để tôi có thể tích hợp java và C++ không?

Cảm ơn bạn

Trả lời

1

Hava xem JNI (Giao diện nguyên gốc Java). Mặt trời có số trực tuyến book on JNI.

1

Làm thế nào về Thrift?

Tiết kiệm là một khung phần mềm để phát triển các dịch vụ đa ngôn ngữ có thể mở rộng. Nó kết hợp ngăn xếp phần mềm với công cụ tạo mã để xây dựng các dịch vụ hoạt động hiệu quả và liền mạch giữa C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk và OCaml.

3

Swig hoạt động rất tốt. Đó là một phương tiện để liên kết C/C++ với nhiều ngôn ngữ khác nhau. Tôi có kinh nghiệm sử dụng điều này để nói chuyện với C++ với rất ít đau buồn. Here's the manual page về việc sử dụng Swig và Java cùng nhau. The tutorial giúp bạn thực hiện rất nhanh chóng, với nhiều ví dụ bao gồm Java.

Tuy nhiên, tôi sẽ điều tra việc chia ứng dụng của bạn thành kiến ​​trúc máy khách/máy chủ, để tách phần phụ trợ C++ khỏi giao diện người dùng Java. Bạn sẽ tránh được sự phát triển và tích hợp C++/Java = mặc dù bạn sẽ phải thực hiện một số giao thức truyền thông giữa đầu và cuối tùy thuộc vào các yêu cầu (ví dụ: socket cơ bản/webservice/HTTP + REST hoặc có thể là CORBA - Java và được thiết kế cho giao tiếp ngôn ngữ chéo).

1

Nếu bạn không tự viết thư viện phụ trợ C++, nhưng chỉ muốn sử dụng thư viện của bên thứ ba, cách thay thế tốt hơn sẽ là sử dụng JNA.

Lợi ích chính của việc sử dụng JNA trên JNI trong trường hợp này là mã cầu nối được viết bằng Java (thay vì bằng ngôn ngữ mẹ đẻ, C++ trong trường hợp của bạn). Điều này có nghĩa là bạn sẽ không cần phải phức tạp quá trình xây dựng của bạn bằng cách xây dựng giao diện C++ JNI, tất cả các công việc giao diện của bạn sẽ được viết bằng ngôn ngữ của dự án chính.

Nếu tuy nhiên, bạn đang tự mình viết chương trình phụ trợ C++, thì bất kỳ tùy chọn nào khác đã được cung cấp sẽ được áp dụng như nhau.

+0

Lưu ý rằng JNA chỉ hoạt động đối với các thư viện có API C. –

2

Giả sử bạn là thành phần back-end là trên cùng một máy bạn có thể sử dụng một lớp giao diện như mô tả của những người khác

  • JNI
  • JNA
  • Uống một lân
  • QTJambi

Tất cả những thứ này yêu cầu bạn có phần phụ trợ C++ để có sẵn trong một dll và thường cung cấp các proxy Java cho các hàm C và đôi khi c + + lớp học. Có một đường cong học tập cho tất cả những điều này và một số công việc để kích hoạt Proxy.

cách tiếp cận khác sẽ được sử dụng một C++ quá trình và giao tiếp với điều này bằng cách sử dụng

  • dòng lệnh
  • stdin/stdout

Nếu bạn muốn hỗ trợ giao tiếp qua mạng

  • ổ cắm
  • CORBA
  • WebServices
  • Thrift

Đây cũng có một đường cong học tập và một số thiết lập chi phí

Trong số này dòng lệnh hoặc stdin/stdout có lẽ là nhanh nhất để làm việc với lượng công sức và kiến ​​thức tối thiểu. Tuy nhiên, nó không mở rộng tốt cho các giao diện lớn vì bạn phải mã hóa đầu vào và đầu ra của mỗi thư dưới dạng văn bản

Đối với phương pháp dòng lệnh bạn thực thi quy trình C++ bằng cách sử dụng chuyển đổi dòng lệnh cho các tùy chọn, kết quả sẽ được đọc từ các quy trình tiêu chuẩn ra hoặc mã thoát của nó.

Đối với stdin/stdout, bạn bắt đầu quá trình mỗi yêu cầu được gửi tới stdin của quá trình và kết quả được đọc từ stdout.

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