Не могу зарегистрировать интерфейс с regasm - PullRequest
1 голос
/ 22 мая 2019

Пытается зарегистрировать интерфейс, используя 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();
    }


}

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

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

    [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
0 голосов
/ 22 мая 2019

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

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