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

tha*_*alm 15 .net delphi dll interop native

我有一个简单的任务:

有没有可能写一个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;
    } 
}
Run Code Online (Sandbox Code Playgroud)

编辑2:它确实有效!你甚至可以控制编组类型,不可信!

Rob*_*cke 5

一点建议:您不必公开出口.

您的类已经是内部的,因此从其他程序集中使用时它不会显示.

但是,将导出添加到现有静态类也是完全正常的,但将其声明为私有,以便在从.Net使用时不会显示.(非托管出口往往看起来有点令人毛骨悚然)