How to use a C# DLL in C++ using COM

Asked

Viewed 25 times

0

In my project I am developing interoperability between C# and C++ in a single Library. In C++ my C++ functions and functions could bring to C# while C# methods could bring to C++, for example functions to string.

//C++
void ConfigWindowMenu(bool minimizeB, bool maximinizeB, closeB){
     //Controlar o menu da janela como desativar e ativar botões da janela do Windows
}

//C#
[DllImport("C++.dll")]
public static extern void ConfigWindowMenu(bool minimizeB, bool maximinizeB, closeB);

//Usar adiante

It would be an advantage to develop in both these languages, now comes the problem: It’s just that I want to bring methods and others from C# to C++, so I’m going to use COM.

namespace AdvancedStringC__
{
    public interface IString
    {
        bool Contains(string item, string toFind);
    }

    public class StringCPlusPlus : IString
    {
        
        public bool Contains(string item, string toFind) => item.Contains(toFind);

    }
}

Then, in Properties > Build > Marked 'Register for COM interoperability', then signed Assembly in Properties > Signatures > Mark 'Sign Assembly' and create password-free signature. Even registered for COM interoperability must go to AssemblyInfo.cs and edit visibility for COM.

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

// As informações gerais sobre um assembly são controladas por
// conjunto de atributos. Altere estes valores de atributo para modificar as informações
// associada a um assembly.
[assembly: AssemblyTitle("AdvancedStringC++")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AdvancedStringC++")]
[assembly: AssemblyCopyright("Copyright ©  2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Definir ComVisible como false torna os tipos neste assembly invisíveis
// para componentes COM. Caso precise acessar um tipo neste assembly de
// COM, defina o atributo ComVisible como true nesse tipo.
[assembly: ComVisible(true)] //<------ aqui era false.

// O GUID a seguir será destinado à ID de typelib se este projeto for exposto para COM
[assembly: Guid("e9994c9f-a3ed-4f19-99c4-25fc26e7257a")]

// As informações da versão de um assembly consistem nos quatro valores a seguir:
//
//      Versão Principal
//      Versão Secundária 
//      Número da Versão
//      Revisão
//
// É possível especificar todos os valores ou usar como padrão os Números de Build e da Revisão
// usando o '*' como mostrado abaixo:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

After compiling I get Dll, Pdb and tlb only I don’t know how to add this tlb in C++, I’m using the recent Visual Studio.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.