2014-04-29 50 views
4

我的公司已經創建了幾個COM對象,他們正在從.NET中愉快地使用它們。但是現在,我們的客戶想要改用Java。我認爲使用JACOB或j-interop(我不確定它們中的哪些)對於某些任務會很有趣,但是由此產生的代碼非常難以管理。所以我想寫一個可以讀取COM庫的TypeLib的工具,然後生成Java包裝類來隱藏所有那些難以管理的代碼。我是一個COM世界的新手,所以我不知道如何獲取有關介紹COM對象的接口,方法和參數的信息。我閱讀了一些名爲TypeLib的內容,但我不知道如何閱讀它。我如何從中獲取信息?如何用C#或C++讀取COM TypeLib?

回答

4

官方API可在這裏找到:Type Description Interfaces。你可以直接在C++中使用它,但是我建議你使用.NET(C#在我的示例中)和微軟早已寫過的一個額外工具(我的日期是1997年),名爲TLBINF32.DLL。它也是一個COM對象,但是自動化(VBScript,Javascript,VB/VBA)和.NET兼容。

你可以找到TLBINF32.DLL使用Google搜索(這個鏈接似乎今天工作:tlbinf32.dll download,確保你得到.ZIP文件,而不是他們所說的「修復程序」...)。請注意它是一個32位的DLL,因此您的程序必須編譯爲32位才能使用它。我不知道任何64位版本。

如何使用這個庫在這裏2000年12月MSDN雜誌的文章:Inspect COM Components Using the TypeLib Information Object Library詳細解釋。它是VB(不是.NET)導向的,但是用.NET來翻譯是很容易的。

這裏是C#示例控制檯應用程序,只是轉儲所有類型信息從類型LIB(這裏MSHTML.tlb的):

class Program 
{ 
    static void Main(string[] args) 
    { 
     TypeLibInfo tli = new TypeLibInfo(); 
     tli.ContainingFile = @"c:\windows\system32\mshtml.tlb"; 
     foreach (TypeInfo ti in tli.TypeInfos) 
     { 
      Console.WriteLine(ti.Name); 
      // etc... 
     } 
    } 
}