2017-02-17 38 views
-1

在C#中,我在我的解決方案中有一個類和它的接口,並且我希望它們可以是COM可見的。Delphi 7在導入類型庫時不生成COM類

我:

  1. 創建的接口和類如下:

    [InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("0D1ABB24-144E-4C88-A4A5-DC3ED0E61BEB")] 
    [ComVisible(true)] 
    public interface IMyInterface 
    { 
        // methods here 
    } 
    
    [ClassInterface(ClassInterfaceType.None), Guid("01AA5822-83D1-42C6-A578-C9A84AB836AA")] 
    [ComVisible(true)] 
    public class MyClass : IMyInterface 
    { 
        // implementation here 
    } 
    

    (注意:他們都是COM可見)

  2. 生成一個GUID和通報了組裝信息:

    [assembly: Guid("MY-GUID-HERE")] 
    
  3. 與此命令行註冊它:

    c:\regasm.exe /tlb MyAssembly.Dll 
    
  4. 進口類型庫在Delphi 7.

產生的單元,但它不包含類和函數/過程。撥打CoClass.Create返回了「未註冊的類」錯誤。

後來我用類庫創建了一個新的解決方案,執行上面的相同操作,以及生成的和我可以訪問它們的類/方法。

有沒有關於我可能錯過了什麼的提示?

+0

你應該嘗試添加/ codebase選項到你的regasm命令。此外,您的DLL和您的Delphi項目需要同時爲32位或64位。 我通常嘗試通過使用VBS腳本來創建對象來測試DLL的註冊。如果您構建的是32位DLL,則必須確保使用c:\​​ windows \ syswow64中的cscript.exe或wscript.exe - 假設爲64位操作系統。 –

+1

另外,使用Oleview嘗試打開生成的TLB文件,看看它是什麼樣的 - 假設你有visual studio。我不熟悉德爾福公司提供的工具可以做同樣的事情。 –

回答

0

我發現了區別。 我想出口的一個TLB類在一個地區有一些構造函數。當我展開它時,我看到沒有沒有參數的重載構造函數。 添加無參數構造函數後,它在Delphi中可見,我可以正常使用它。

相關問題