2009-02-04 43 views
47

Tôi là một lập trình viên cấp mục nhập, vì vậy hãy mô tả trong câu trả lời của bạn.Sử dụng API thư viện java .jar trong C#?

Tôi đang cố gắng sử dụng API Java được cung cấp dưới dạng tệp .jar trong ứng dụng C# .net của tôi. Tôi không biết nhiều Java, nhưng tệp .jar này nói "không có thuộc tính manifest lớp chính" khi tôi cố gắng chạy nó vì vậy điều này có nghĩa là một thư viện của nó? Java API này cũng đi kèm với một tệp .java cho thấy cách sử dụng thư viện nhưng tôi không thể thấy mã bên trong .jar.

Tôi tìm thấy this question trên trang web này và một trong các câu trả lời là "Theo cách đơn giản, bạn có thể đóng gói các lớp java của bạn vào tệp jar sau đó Trong C# sử dụng Process class for execute and map IO stream." Tôi đã quen thuộc với lớp Process trong C# nhưng tôi không hiểu làm thế nào tôi có thể sử dụng nó để sử dụng một thư viện Java trong dự án C# .net của tôi.

Điều này có khả thi không? hoặc câu trả lời đó có đúng không?

Nếu có, bạn có thể giải thích cách tôi có thể sử dụng thư viện .jar trong ứng dụng C# của tôi không.

Trả lời

65

Bạn có thể làm điều đó bằng cách sử dụng IVKM.Net. IVKM.NET bao gồm một ứng dụng gọi là ikvmc. Đây là tài liệu hướng dẫn cho công cụ này:

http://www.ikvm.net/userguide/ikvmc.html

Để sử dụng nó biên dịch mã java của bạn thành một Jar.

Sau đó chạy chương trình ikvmc:

ikvmc myCode.jar

Nếu jar của bạn có chứa một hàm main(), nó sẽ được chuyển đổi thành một exe có thể chạy trên CLR. Nếu không, nó sẽ được chuyển đổi thành dll. Để sử dụng dll trong dự án của bạn, chỉ cần thêm chúng dưới dạng tham chiếu trong Visual Studio và cùng một API có sẵn cho bạn trong Java sẽ có thể truy cập được trong ứng dụng .Net của bạn.

Bạn cũng có thể bao gồm dll IKVM.GNU.Classpath.dll từ ikvmc và sử dụng thư viện lớp chuẩn java trong ứng dụng của mình.

+0

cảm ơn tôi sẽ thử. một khi tôi có .dll và tôi nhập nó vào dự án của tôi, tôi nên gọi chức năng của thư viện bằng cách sử dụng Pinvoke? – timmyg

+1

Bạn không cần sử dụng pinvoke. Bạn sẽ có thể chỉ cần gọi api giống như bạn sẽ như thể nó được viết bằng C#. –

+1

bạn nên thay đổi "chạy trên CIL" thành "chạy trên CLR" – LDomagala

4

Hãy xem IKVM ... nó có các công cụ để cung cấp cho bạn một số mức độ tương tác. Khi bạn nói Java API, tôi giả sử bạn muốn gọi một số chức năng từ bình thay vì chỉ thực hiện nó

+0

Chính xác, .jar không thực hiện, nó báo cáo một thông báo lỗi có nội dung "Không thể tải thuộc tính tệp kê khai chính từ ...". Một khi tôi có .jar chuyển đổi sang .dll Tôi sẽ cố gắng sử dụng nó giống như ví dụ được mã hóa java bằng cách sử dụng .jar. – timmyg

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