繁体   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