COM из c# не работает в c++-cli

Никак не получается сделать так, чтобы COM-объект заработал в c++-cli C#:

using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace COM_test
{
    [Guid("7FAFBE67-24F0-44F9-8C0C-10F795C4E838")]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface ICalculator
    {
        int Sum(int a, int b);
    }

    [Guid("9A946209-4EF3-47BD-B4C7-8B1F2EFFCF53")]
    [ClassInterface(ClassInterfaceType.None)]
    [ComSourceInterfaces(typeof(ICalculator))]
    [ComVisible(true)]
    public class Calculator : ICalculator
    {
        public int Sum(int a, int b)
        {
            return a + b;
        }
    }
}

AssemblyInfo.cs:

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// Общие сведения об этой сборке предоставляются следующим набором
// набора атрибутов. Измените значения этих атрибутов для изменения сведений,
// связанные со сборкой.
[assembly: AssemblyTitle("COM_test")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("MagaEnterprise")]
[assembly: AssemblyProduct("COM_test")]
[assembly: AssemblyCopyright("Copyright ©  2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми
// для компонентов COM. Если необходимо обратиться к типу в этой сборке через
// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
[assembly: ComVisible(true)]
[assembly: AssemblyKeyFile("COM_test.snk")]

// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
[assembly: Guid("2bacca61-7291-4b5d-aeab-16e2b2d6c93f")]

// Сведения о версии сборки состоят из указанных ниже четырех значений:
//
//      Основной номер версии
//      Дополнительный номер версии
//      Номер сборки
//      Редакция
//
// Можно задать все значения или принять номера сборки и редакции по умолчанию 
// используя "*", как показано ниже:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.2.0.0")]
[assembly: AssemblyFileVersion("1.2.0.0")]

Вот что происходит в c++ C++

Что я делаю не так? Почему вместо имени dll отображается GUID? По какой причине не генерируется tlh файл(Пришлось самому писать его)?


Ответы (0 шт):