Проблема COM-взаимодействия: интерфейс неправильно зарегистрирован в реестре, хотя класс в порядкеC#

Место общения программистов C#
Ответить
Anonymous
 Проблема COM-взаимодействия: интерфейс неправильно зарегистрирован в реестре, хотя класс в порядке

Сообщение Anonymous »

Описание проблемы. Я работаю над использованием COM-взаимодействия для вызова асинхронного метода C# из VBA. Класс (NewAsyncTaskRunner) распознается и работает нормально, но интерфейс (INewCallback) не распознается в VBA. При проверке реестра интерфейс назван неправильно. Для разработки я использую код Visual Studio.
Код C#: NewAsyncTaskRunner.cs

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

using System;
using System.Runtime.InteropServices;
using System.Threading.Tasks;

namespace NewAsyncCallbackTest
{
[ComVisible(true)]
[Guid("dd9e3e74-f630-4ecc-8b09-e45512da443c")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface INewCallback
{
void OnTaskCompleted(string result);
}

[ComVisible(true)]
[Guid("22222222-2222-2222-2222-222222222222")]
[ClassInterface(ClassInterfaceType.None)]
public class NewAsyncTaskRunner
{
public void RunAsyncTask(string input, INewCallback callback)
{
Task.Run(async () =>
{
await Task.Delay(5000); // 5 seconds delay
string result = $"Task completed with input: {input}";
callback.OnTaskCompleted(result);
});
}
}
}
AssemblyInfo.cs

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

using System.Runtime.InteropServices;

[assembly: ComVisible(true)]
Файл проекта: NewAsyncCallbackLibrary.csproj

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



net48
10.0
true
MyKeyFile.snk



Зарегистрировал сборку с помощью:

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

& "C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe" "C:\Path\To\Your\DLL\NewAsyncCallbackLibrary.dll" /codebase /tlb
Проверка реестра:
Интерфейс: найден GUID dd9e3e74-f630-4ecc-8b09-e45512da443c в разделе HKEY_CLASSES_ROOT\Interface, но отображаются только номера и версия , а не INewCallback.
Класс: найден GUID 22222222-2222-2222-2222-222222222222 в разделе HKEY_CLASSES_ROOT\CLSID с правильным именем NewAsyncTaskRunner.
Проблема: класс NewAsyncTaskRunner распознается в VBA, но интерфейс INewCallback — нет. Интерфейс отображается в реестре без своего имени.
Мы будем очень признательны за любые идеи или предложения о том, что может быть не так с регистрацией интерфейса и как это исправить. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/792 ... e-class-is
Ответить

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

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

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

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

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