2013-02-19 36 views
7

Tôi đã thấy một vài bài viết về điều này, nhưng tôi chưa thấy bất kỳ giải pháp nào cho đến nay. Tôi có một tập tin .jar mà tôi đang chuyển đổi sang một DLL .NET thông qua IKVM. Tôi đang cố gắng tìm ra cách để làm cho các phương pháp trong DLL có sẵn bên trong môi trường VBA excel. đây là những thông tin chi tiết.Làm cách nào để tạo một .dll được tạo bằng IKVM com?

1.) được cài đặt IKVM & đăng ký nó DLL để GAC

2.) chạy IKVM để tạo ra một .net .dll (mytest.dll)

ikvmc mytest.jar 

3.) đăng ký mới .dll

regasm mytest.dll 

4.) Từ đây tôi đã tạo dự án VB.NET và thêm mytest.dll và IKVM.OpenJDK.Core.dll làm tham chiếu đến dự án. Sau đó tôi có thể truy cập các phương thức trong .dll trong .NET. Điều đó thật tuyệt!

5.) những gì tôi thực sự muốn làm là có thể sử dụng .dll trong VBA. Ban đầu vba sẽ không chấp nhận các .dll trực tiếp vì nó là một thư viện .net. Tôi đã cố tạo thư viện kiểu:

regasm /codebase /tlb mytest.dll 

Điều này tạo tệp .tlb đẹp, nhưng nó đã cảnh báo về thư viện không được đặt tên mạnh.

6.) sau đó tôi tải tệp .tlb làm tham chiếu trong trình chỉnh sửa vba của tôi. Điều này làm việc, tuy nhiên khi tôi cố gắng truy cập các phương thức không có gì xuất hiện. Tương tự như vậy nếu tôi nhìn vào người xem đối tượng cho thư viện của tôi tôi có thể nhìn thấy hai lớp của tôi nhưng không phải là thành viên của các lớp đó.

Ngoài ra, tôi tưởng tượng rằng có lẽ tôi cũng cần bằng cách nào đó tham khảo IKVM.OpenJDK.Core.dll bên trong VBA. Tuy nhiên tôi không thể làm điều đó, hoặc vì nó là một .NET .dll.

Có ai đã thành công trong việc chuyển đổi tệp .jar thành một thứ có thể được sử dụng với VBA không?

Trả lời

11

Tôi nghĩ bạn luôn cần đánh dấu rõ ràng một lớp có thể sử dụng được thông qua COM interop. Dưới đây là một ví dụ về một lớp Java có nghĩa là có thể sử dụng từ VBA:

import cli.System.Runtime.InteropServices.*; 

@ClassInterfaceAttribute.Annotation(ClassInterfaceType.__Enum.AutoDual) 
public class SampleWidget { 
    public int Add(int x, int y) { 
    return x + y; 
    } 
} 

Dưới đây là các bước để biên dịch:.

  1. Sao chép IKVM.Runtime.dll và tất cả IKVM.OpenJDK * dll vào. thư mục hiện tại hoặc GAC.
  2. Chạy "ikvmstub mscorlib" để tạo mscorlib.jar.
  3. Tạo nguồn Java có tên SampleWidget.java chứa mã ở trên.
  4. javac -cp mscorlib.jar ;. SampleWidget.java
  5. ikvmc out: SampleLibrary.dll SampleWidget.class -r: mscorlib.dll
  6. tlbexp SampleLibrary.dll
  7. regasm/codebase SampleLibrary.dll (bước này cần quyền quản trị)

Bây giờ bạn có thể thêm một tham chiếu đến SampleLibrary.tlb từ VBA và sử dụng lớp SampleWidget.

+0

Điều này hoàn toàn hiệu quả. Cảm ơn rất nhiều vì bạn đã trả lời! – user2088580