首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Delphi中调用.NET Core6.0DLL?

如何在Delphi中调用.NET Core6.0DLL?
EN

Stack Overflow用户
提问于 2022-03-07 08:39:16
回答 3查看 1.3K关注 0票数 2

初始情况

之前,我使用了Component Object Model (COM),以便使用Delphi中的C#类库,如这个YouTube教程中所示,它运行得非常好。但是,我现在想要使用.NET核心6。

按照Microsoft “将.NET核心组件公开给COM”的官方教程,我创建了这个界面。

代码语言:javascript
运行
复制
using System.Runtime.InteropServices;

[ComVisible(true)]
[Guid(6775d93d-cf14-42b9-83db-425bac0acf4d)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IServer
{
    public string getHelloWorld();
}

还有这门课。

代码语言:javascript
运行
复制
using System.Runtime.InteropServices;

[ComVisible(true)]
[Guid(d62bf794-d29e-4fcd-8637-994490264a93)]
public class Server : IServer
{
    public string getHelloWorld()
    {
        return "Hello World";
    }
}

在构建项目之后,我执行了这个命令,用COM注册了所有公开的.NET对象。

代码语言:javascript
运行
复制
regsvr32 MyProjectName.comhost.dll

该命令已成功执行。现在,我尝试在Delphi中导入创建的.dll文件,就像以前使用.NET框架编写的类库一样(参见YouTube教程的时间戳)。但是,Delphi遇到了一个错误,因为它无法加载类型库。

编辑1:哥斯拉-类型的破坏变化

根据正式文件..。

与.NET框架不同,.NET Core或.NET 5+中不支持从.NET程序集生成COM类型库(TLB)。指南是为COM接口的本机声明手动编写IDL文件或C/C++头。如果您决定编写一个IDL文件,您可以使用VisualC++SDK的MIDL编译器编译它以生成一个TLB。

..。在.NET核心中不支持生成类型表。

编辑2: MIDL编译器

但是,仍然有一种使用MIDL编译器手动生成TBL文件的方法。当您可以在正式文件中读取时,MIDL编译器会处理一个IDL文件来生成一个类型库。说到这里,我使用本指南创建了这个IDL文件。

代码语言:javascript
运行
复制
[
    uuid(a93d03e0-9adf-4a2d-93e3-0ccfc2d8e1a6),
    lcid(0x0409),
    version(1.0),
]
library MyProjectName
{
    importlib("stdole.tlb"); 
    [
        uuid(16292ce5-ccd1-405d-9a70-ace42152bb15),
        oleautomation,
        dual
    ]
    interface IServer: IUnknown {
        HRESULT getHelloWorld([out, string] IServer** string);
    };
};

但是,当我执行以下命令生成.tlb文件时,会出现一个错误。

代码语言:javascript
运行
复制
midl myProjectName.idl /tlb myProjectName.tlb

> midl : command line error MIDL1005 : cannot find C preprocessor cl.exe

问题:,我在电脑上搜索cl.exe,但什么也找不到。

问:,有人知道我如何解决我的问题吗?我非常感谢任何帮助,干杯!

EN

回答 3

Stack Overflow用户

发布于 2022-03-09 14:17:37

如果您不介意切换到另一种方法,则可以使用.Net使用NativeAOT编译本机库。您可以找到一个示例这里

它似乎计划在.Net 7中提供。,但是您已经可以开始在.Net 6中使用它了。

票数 1
EN

Stack Overflow用户

发布于 2022-03-11 20:11:39

使用MVC创建API并从Delphi应用程序调用它不是更容易吗?这样就可以避免DLL的所有问题。

票数 1
EN

Stack Overflow用户

发布于 2022-03-15 08:26:43

也许这个工具能帮你:

https://github.com/dspace-group/dscom

代码语言:javascript
运行
复制
 C:\> dotnet tool install dscom -g

 C:\> dscom tlbexport myassembly.dll
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71378349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档