Visual C++ .NET - Leer dll c++ nativo con interfaz C++ CLR

 
Vista:
sin imagen de perfil
Val: 5
Ha aumentado 1 puesto en Visual C++ .NET (en relación al último mes)
Gráfica de Visual C++ .NET

Leer dll c++ nativo con interfaz C++ CLR

Publicado por Meta (5 intervenciones) el 18/06/2020 12:38:03
Buenas:

Tengo un ejemplo en C# en el cual me lee una dll hecho en C++ nativo. Quiero con el C++ CLR o .net que haga de intergaz y me funcione, pero no se corregir los errores.

Dejo el ejemplo completo y funciona en el lenguaje C#. Quiero adaptar el C# a C++ CLR o .net.

Código C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
using System.Runtime.InteropServices;
 
namespace Consola_cs
{
    class Program
    {
        static void Main(string[] args)
        {
            // Título de la ventana.
            Console.Title = "Consola C# 2019";
 
            // Tamaño de la ventana.
            Console.SetWindowSize(40, 5);
 
            // Color de las letras.
            Console.ForegroundColor = ConsoleColor.Green;
 
            Console.WriteLine(Marshal.PtrToStringAuto(SUPER_DLL.Mensaje()));
            Console.WriteLine(SUPER_DLL.Suma(1764, -764).ToString());
 
            // Pulse cualquier tecla para salir.
            Console.ReadKey();
        }
        internal class SUPER_DLL
        {
            [DllImport("Super_dll.dll")]
            extern static public int Suma(int a, int b);
            [DllImport("Super_dll.dll")]
            extern static public IntPtr Mensaje();
        }
    }
}

Código con errores y quiero corregirlo en C++ CLR o .net:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "pch.h"
#include <OAIdl.h>
 
using namespace System;
 
int main(array<System::String ^> ^args)
{
    // Título de la ventana.
    Console::Title = "Consola C# 2019";
 
    // Tamaño de la ventana.
    Console::SetWindowSize(40, 5);
 
    // Color de las letras.
    Console::ForegroundColor = ConsoleColor::Yellow;
 
    Console::WriteLine(Marshal->PtrToStringAuto(SUPER_DLL::Mensaje()));
    Console::WriteLine(SUPER_DLL::Suma(1764, -764)::ToString());
 
    // Pulse cualquier tecla para salir.
    Console::ReadKey();
    return 0;
}
 
internal class SUPER_DLL
{
    [DllImport("Super_dll.dll")]
    extern static public int Suma(int a, int b);
    [DllImport("Super_dll.dll")]
    extern static public IntPtr Mensaje();
}

¿Alguna idea?

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder