簡體   English   中英

如何在Delphi中使用.Net程序集而無需在GAC或COM中注冊?

[英]How to use a .Net Assembly in Delphi without registering it in the GAC or COM?

我有一個簡單的任務:

有沒有可能寫一個Delphi DLL並放一個.Net程序集(只有一個接口有4個方法和一個實現接口的類)除了它並從Delphi DLL調用它?

我的意思是,如果我為tlb創建一個tlb和一個delphi單元,而不注冊Assembly / tlb,我可以直接從.Net程序集導入.Net類型(相對文件名)嗎?

最好的,thalm

編輯(我找到了):

大多數解決方案必須為COM注冊至少一個dll / tlb。 但我發現最有希望的事情是:來自Robert Giesecke的Unmanaged Exports ,它是一個Visual Studio項目模板,它允許你編寫靜態C#(或任何.Net語言)方法,並從任何非托管語言調用它們,真棒:

class Test
{
    [DllExport("add", CallingConvention = CallingConvention.StdCall)]
    public static int Add(int left, int right)
    {
        return left + right;
    } 
}

編輯2:它確實有效! 你甚至可以控制編組類型,不可信!

一點建議:您不必公開出口。

您的類已經是內部的,因此從其他程序集中使用時它不會顯示。

但是,將導出添加到現有靜態類也是完全正常的,但將其聲明為私有,以便在從.Net使用時不會顯示。 (非托管出口往往看起來有點令人毛骨悚然)

您可以使用免費注冊COM執行此操作。 請參閱我在這里注冊免費com的問題的答案。 使用.NET程序集,您需要使您的接口和方法COMVisible,就像您將使用已注冊的COM使用該對象一樣。 如果你按照我剛才提到的問題回答我的答案,你應該能夠將dll並排放置。 唯一的區別是您需要將有關要導出的COM類的信息放入程序集清單(受管理的清單)中。 如果您查看有關應用程序和程序集清單的microsoft站點上的文檔,您應該了解如何執行此操作。 您正在尋找的清單屬性是CLRClass 如果您已正確設置所有內容,則只需將托管dll與調用可執行文件並排放置即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM