gpt4 book ai didi

.NET Core 2.1 - 如何创建COM对象并生成*.tlb文件

转载 作者:行者123 更新时间:2023-12-03 02:37:43 27 4
gpt4 key购买 nike

我想在.net Core中构建COM对象,然后通过RegAsm注册。

我的 .csproj 文件:

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>netcoreapp2.1;net4.7.2</TargetFrameworks>
<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
<Platforms>x64</Platforms>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
</Project>

我的程序.cs:

using System;
using System.Runtime.InteropServices;

namespace ComExample
{
[Guid("7ce1e40f-760a-4d81-b70b-61108ed15cb4")]
[ComVisible(true)]
public interface IComExampleClass
{
IComModelClass ExampleMethod(string param1, string param2);

}

[Guid("a8436b3f-3657-4a01-a133-fd333a84cb58")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class ComExampleClass : IComExampleClass
{
public IComModelClass ExampleMethod(string param1, string param2)
{
return new ComModelClass()
{
Result = $"{param1} + {param2}"
};
}
}

[Guid("9f5aeede-ec3e-443d-8ba0-9a9f2a6b9e53")]
[ComVisible(true)]
public interface IComModelClass
{
string Result { get; set; }
}

[Guid("526c6cb5-264d-4629-a894-fff02aeb9ec1")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class ComModelClass : IComModelClass
{
public string Result { get; set; }
}

class Program
{
static void Main(string[] args)
{
var test = new ComExampleClass();
Console.WriteLine(test.ExampleMethod("A", "B").Result);
Console.ReadKey();
}
}

在 .netcore2.1 目标框架中发布项目后,我无法使用 c:\Windows\Microsoft.NET\Framework64\v4.0.30319 中的 RegAsm 注册 COM。

将项目发布到net4.7.2后,我可以通过RegAsm注册程序集,然后在CPP项目中使用它。

我也无法使用 TblExp.exe 从 .net core 项目生成 tlb 文件。

看起来很奇怪。我可以注册.Net Standard 程序集。如果我使用上述源代码和 csproj 创建 .Net 标准库:

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>

</Project>

那么 RegAsm 效果很好

RegAsm.exe /tlb:C:\[...]\DotnetStandardCom\bin\Debug\netstandard2.0\DotnetStandardCom.tlb C:\[...]\DotnetStandardCom\bin\Debug\netstandard2.0\DotnetStandardCom.dll

Microsoft .NET Framework Assembly Registration Utility version 4.7.3062.0
for Microsoft .NET Framework version 4.7.3062.0
Copyright (C) Microsoft Corporation. All rights reserved.

Types registered successfully
Assembly exported to 'C:\[...]\DotnetStandardCom\bin\Debug\netstandard2.0\DotnetStandardCom.tlb', and the type library was registered successfully

但是我无法注册.Net Core 程序集吗?

最佳答案

由于在 .NETCore 版本 3 上所做的工作,现在这成为可能。正如我在评论中指出的,托管是早期 .NETCore 版本中缺失的部分,无法替代 mscoree.dll。版本 3 提供 comhost.dll。相关的是,它们现在还可以支持 C++/CLI 代码,ijwhost.dll 是替代品。

您可以像使用传统 COM 服务器一样使用 Regsvr32.dll 注册组件

您需要了解的一切都可以在 this MSDN page 中找到。 ,一个月前添加。请注意,.NETCore 3 目前仍处于预览质量。而且这仅适用于 Windows,没有适用于 Linux 和 macOS 的迁移路径,COM 与仅在 Windows 上可用的服务过于紧密地联系在一起。

关于.NET Core 2.1 - 如何创建COM对象并生成*.tlb文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51515572/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com