Это код для Class1.cs по умолчанию:
Код: Выделить всё
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.Marshalling;
namespace ComHostTest
{
[GeneratedComClass]
[Guid("63C60D62-317F-4BAB-BB20-0AB41F34A345")]
public partial class Class1
{
public string SayHello() => "Hello World from .NET " + RuntimeInformation.FrameworkDescription;
}
}
Код: Выделить всё
net8.0
enable
enable
x86
true
true
AnyCPU;x86
[img]https://i.stack.imgur.com /B6tgc.png[/img]
Используя командную строку с повышенными правами, я успешно зарегистрировал comhost.dll:

[img]https://i.stack.imgur .com/PZ9BF.png[/img]
Затем, используя окно ссылок VB6 IDE или OLEViewer, я не вижу сборку ComHostTest как доступную библиотеку типов COM:


Есть идеи, почему?
Я читал очень похожий вопрос, где человек также использует .NET 8, но не GeneratedComInterfaceAttribute.
Изменить
Я скорректировал свой код, следуя комментариям Саймона Мурье:
Код: Выделить всё
using System.Runtime.InteropServices;
namespace ComHostTest
{
[ComVisible(true)]
[Guid("72433A8C-941E-4876-8CC2-15F6F4235F32")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IComHostTest
{
public string SayHello();
}
[ComVisible(true)]
[Guid("63C60D62-317F-4BAB-BB20-0AB41F34A345")]
[ClassInterface(ClassInterfaceType.None)]
public class ComHostTest : IComHostTest
{
public string SayHello() => "Hello World from .NET " + RuntimeInformation.FrameworkDescription;
}
}
Я загрузил выпуск dscom32 из GitHub, а затем из окна Developer PowerShell в Visual Studio я выполнил следующую команду:
Код: Выделить всё
dscom32 tlbexport "D:\.NET Projects\Development\COM host\ComHostTest\bin\x86\Debug\net8.0\ComHostTest.dll"
Код: Выделить всё
net8.0
enable
enable
x86
true
true
AnyCPU;x86
Подробнее здесь: https://stackoverflow.com/questions/783 ... vb6-vba-or