Не могу зарегистрировать интерфейс в regasm

Пытаюсь зарегистрировать интерфейс, используя regasm

Я пытался поиграть с AssemblyInfo.cs, переключая ComVisible, но не повезло. Я пытался подписать его. Регазм всегда отвечает

RegAsm : предупреждение RA0000 : типы не зарегистрированы

Мой проект - библиотека классов, .net 4.5.

Мой единственный файл cs — Interface.cs выглядит так:

using System;
using System.Runtime.InteropServices;

namespace ComTestInterface
{


    [ComImport]
    [System.Security.SuppressUnmanagedCodeSecurity]
    [Guid("647ED2ED-78DB-4168-B50E-DD4C506EAF53")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface ImageSourceFilter
    {
        void SetColor();
    }


}

Звучит нехорошо, высока вероятность того, что вы пытаетесь прострелить левую ногу. Объясните, почему вы считаете, что вам нужно зарегистрировать его.

Hans Passant 22.05.2019 17:34

@HansPassant Мне тоже нужен доступ к моему методу фильтра directshow.

XLR8 23.05.2019 08:16
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
2
434
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Удалите атрибут ComImport и добавьте атрибут ComVisible:

[ComVisible(true)]
[System.Security.SuppressUnmanagedCodeSecurity]
[Guid("647ED2ED-78DB-4168-B50E-DD4C506EAF53")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface ImageSourceFilter
{
    void SetColor();
}

Не помог.

XLR8 23.05.2019 08:40

Он должен работать. Разместите где-нибудь свой полный проект, включая полную командную строку regasm, которую вы запускаете.

Simon Mourier 23.05.2019 09:39
Ответ принят как подходящий

Задача решена. Я зарегистрировал интерфейс в том же проекте, где находится класс. Со следующим кодом Интерфейс:

    [ComVisible(true)]
    [System.Security.SuppressUnmanagedCodeSecurity]
    [Guid("170BB172-4FD1-4eb5-B6F6-A834B344260F")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IImageSourceFilter
    {
        void SetColor();
    }

Сорт:

 [ComVisible(true)]
    [Guid("170BB172-4FD1-4eb5-B6F6-A834B344268F")]
    [ClassInterface(ClassInterfaceType.None)]
    public class ImageSourceFilter : BaseSourceFilter,IImageSourceFilter
    {
  public void SetColor()
        {...}
     }

Также стоит упомянуть, что этот класс должен наследовать этот интерфейс. Регистрация завершена событием Post-Build в настройках проекта с параметрами:

"$(TargetDir)install.bat" $(TargetName)

И install.bat содержал следующее:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe %1.dll /nologo /codebase /tlb: %1.tlb

Другие вопросы по теме