Класс COM .NET 8, использующий GeneratedComInterfaceAttribute, невидимый для VB6/VBA или OLEViewerC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Класс COM .NET 8, использующий GeneratedComInterfaceAttribute, невидимый для VB6/VBA или OLEViewer

Сообщение Anonymous »

После статьи Microsoft о создании исходного кода для ComWrappers я создал простой проект библиотеки классов .NET 8 в Visual Studio 2022, используя атрибут GeneratedComInterfaceAttribute. Мой класс основан на аналогичном классе, описанном в другом вопросе о переполнении стека, где используется .NET 5.
Это код для 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



Моя конфигурация сборки и PlatformTarget настроены для x86. Проект компилируется правильно и генерирует ComHostTest.comhost.dll:
[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;
}

}
Файл проекта не был затронут, поскольку он уже включал true.
Я загрузил выпуск dscom32 из GitHub, а затем из окна Developer PowerShell в Visual Studio я выполнил следующую команду:

Код: Выделить всё

dscom32 tlbexport "D:\.NET Projects\Development\COM host\ComHostTest\bin\x86\Debug\net8.0\ComHostTest.dll"
Это сгенерировало файл ComHostTest TLB, который я включил в свой файл .csproj:

Код: Выделить всё



net8.0
enable
enable
x86
true
true
AnyCPU;x86







Пока не удалось увидеть это в VB6 IDE, но я должен быть близок к этому.


Подробнее здесь: https://stackoverflow.com/questions/783 ... vb6-vba-or
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как разблокировать проект vba через пароль, используя код vba
    Гость » » в форуме Python
    0 Ответы
    605 Просмотры
    Последнее сообщение Гость
  • Мы перенесли код VB6 на C# в .net.
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как обрабатывать несоответствия типов данных при переносе кода VB6 в .NET? [закрыто]
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • C# COM INTEROP и VB6 – ресурсы не выпускаются
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • C# COM INTEROP и VB6 – ресурсы не выпускаются
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»