2008-09-08 39 views
30

Có ai có giải pháp tốt để tích hợp một số mã C# vào ứng dụng java không?Gọi mã C# từ Java?

Mã nhỏ, vì vậy tôi có thể viết lại bằng java, nhưng tôi thà sử dụng lại mã nếu có thể. Ngoài ra, tôi biết tôi có thể trưng ra C# như một dịch vụ web hoặc bất cứ điều gì, nhưng nó có một số công cụ bảo mật/mã hóa trong đó, vì vậy tôi thà giữ nó tích hợp chặt chẽ nếu có thể. Tôi có thể làm như vậy.


Chỉnh sửa: Nó sẽ nằm trên ứng dụng dựa trên máy chủ, vì vậy "tải xuống" thời gian chạy khác không liên quan.

+0

Nếu dựa trên máy chủ, nền tảng là gì? Tôi không có ý tưởng làm thế nào những thứ như COM interop làm việc với Mono, vì vậy đó là một yếu tố khác để xem xét. – FlySwat

Trả lời

4

Có một IL Java bytecode biên dịch GrassHopper có thể được sử dụng cho bạn. Tôi chưa bao giờ thử nó.

Tôi muốn xem lại mã của bạn bằng Java mặc dù

EDIT: Lưu ý rằng Grasshopper dường như không còn khả dụng nữa.

+0

Liên kết phễu cỏ bị hỏng. –

+0

Có lẽ không còn nữa –

7

Nếu ngắn, tôi nghĩ bạn nên viết lại mã này bằng java. Tải xuống một thời gian chạy 50Mb là đủ xấu.

0

Tôi sẽ viết lại nếu không có quá nhiều rắc rối. Dịch vụ web sẽ hoạt động, nhưng có vẻ như sẽ có rất nhiều chi phí chỉ để sử dụng lại một mã nhỏ.

26

Bạn sẽ sử dụng Giao diện bản địa Java để gọi mã C# của bạn được biên dịch thành một DLL.

Nếu một lượng nhỏ C#, sẽ dễ dàng hơn khi chuyển nó sang Java. Nếu nó rất nhiều, đây có thể là một cách tốt để làm điều đó.

Đây là một cái nhìn tổng quan Corporate của nó:

http://en.wikipedia.org/wiki/Java_Native_Interface

tùy chọn khác của bạn sẽ tạo ra một hội đồng COM từ mã C# và sử dụng J-Interop để gọi nó.

http://sourceforge.net/projects/j-interop/

2

Nếu bạn không muốn phải viết lại hadle nó như một Inter-process communication và chọn một trong sau:

  • Ống Đặt tên
  • Sockets
  • SOAP
3

Chúng tôi sử dụng JNBridge cho điều này, và nó hoạt động rất tốt. Nó xử lý Java ->. NET và ngược lại, tất cả trong proc.

+1

Vâng, đây là một sản phẩm thương mại. – Barton

16

Tôi là tác giả của jni4net, cầu nội bộ nguồn mở giữa JVM và CLR. Nó được xây dựng trên đầu trang của JNI và PInvoke. Không cần mã C/C++. Tôi hy vọng nó sẽ giúp bạn.

+0

Có vẻ khá thú vị, bạn đã bao giờ tìm cách hỗ trợ cả Linux và Windows chưa? – Manius

0

Nếu nó là một đoạn mã có thể tiếp xúc dưới dạng tiện ích dòng lệnh, tôi chỉ làm cho ngôn ngữ máy chủ khác sử dụng lệnh gọi hệ thống để thực hiện tiện ích.

Nếu ứng dụng C# của bạn cần gọi Java, biên dịch một Java đặc biệt có dòng lệnh thích hợp args và trả về kết quả văn bản.

Đây là phương pháp đơn giản nhất, lâu đời nhất.