none
Corregir este fallo que no me sale un texto desde una dll. RRS feed

  • Pregunta

  • Buenas:

    Probando Visual C++ CLR o .net o CLI como quieran llamarlo. Tengo este código.

    Código C++ CLR:

    #include "pch.h"
    
    using namespace System;
    using namespace System::Runtime::InteropServices;
    
        [DllImport("Super_dll.dll")]
        extern int Suma(int a, int b);
        [DllImport("Super_dll.dll")]
        extern IntPtr Mensaje();
    
    
    int main(array<System::String ^> ^args)
    {
        // Título de la ventana.
        Console::Title = "Consola C++ CLR 2019";
    
        // Tamaño de la ventana.
        Console::SetWindowSize(40, 5);
    
        // Color de las letras.
        Console::ForegroundColor = ConsoleColor::Yellow;
    
        Console::WriteLine(Marshal.PtrToStringAuto(Mensaje()));
        Console::WriteLine(Suma(1764, -764).ToString());
    
        // Pulse cualquier tecla para salir.
        Console::ReadKey();
        return 0;
    }
    

    En el código de arriba marcado en negrita, me da dos errores.

    Gravedad    Código    Descripción    Proyecto    Archivo    Línea    Estado suprimido
    Error (activo)    E0254    no se permite un nombre de tipo    Consola_clr_cpp    C:\Users\Meta\Documents\Visual Studio 2019\Projects\Super_DLL\Consola_clr_cpp\Consola_clr_cpp.cpp    25    

    Gravedad    Código    Descripción    Proyecto    Archivo    Línea    Estado suprimido
    Error    C2275    'System::Runtime::InteropServices::Marshal': uso no válido de este tipo como expresión    Consola_clr_cpp    C:\Users\Meta\Documents\Visual Studio 2019\Projects\Super_DLL\Consola_clr_cpp\Consola_clr_cpp.cpp    25    

    Sustituyo este código :

    Console::WriteLine(Marshal.PtrToStringAuto(Mensaje()))

    Por este otro:

    Console::WriteLine(Mensaje());

    En el mensaje me tiene que salir un mensaje, letras y me sale números.

    Me tiene que salir como indica abajo.

    ¿Alguna solución?

    Gracias.


    http://electronica-pic.blogspot.com

    viernes, 19 de junio de 2020 23:49

Respuestas

  • Deleted
    • Marcado como respuesta Metaconta sábado, 20 de junio de 2020 21:21
    sábado, 20 de junio de 2020 0:16
  • #include "pch.h"
    
    using namespace System;
    using namespace System::Runtime::InteropServices;
    
        [DllImport("Super_dll.dll")]
        extern int Suma(int a, int b);
    
        [DllImport("Super_dll.dll")]
        extern IntPtr Mensaje();
    
    int main(array<System::String ^> ^args)
    {
        // Título de la ventana.
        Console::Title = "Consola C++ CLR 2019";
    
        // Tamaño de la ventana.
        Console::SetWindowSize(40, 5);
    
        // Color de las letras.
        Console::ForegroundColor = ConsoleColor::Yellow;
    
        Console::WriteLine(Marshal::PtrToStringAuto(Mensaje()));
        Console::WriteLine(Suma(1764, -764));
    
        // Pulse cualquier tecla para salir.
        Console::ReadKey();
        return 0;
    }

    Curiosamente se me meta el ejecutable de los C++ en esta dirección en el directorio donde se crea la dll.

    C:\Users\Meta\Documents\Visual Studio 2019\Projects\Super_DLL\x64\Debug

    Gracias por todo.


    http://electronica-pic.blogspot.com

    • Marcado como respuesta Metaconta domingo, 21 de junio de 2020 11:44
    sábado, 20 de junio de 2020 21:22

Todas las respuestas

  • Deleted
    • Marcado como respuesta Metaconta sábado, 20 de junio de 2020 21:21
    sábado, 20 de junio de 2020 0:16
  • #include "pch.h"
    
    using namespace System;
    using namespace System::Runtime::InteropServices;
    
        [DllImport("Super_dll.dll")]
        extern int Suma(int a, int b);
    
        [DllImport("Super_dll.dll")]
        extern IntPtr Mensaje();
    
    int main(array<System::String ^> ^args)
    {
        // Título de la ventana.
        Console::Title = "Consola C++ CLR 2019";
    
        // Tamaño de la ventana.
        Console::SetWindowSize(40, 5);
    
        // Color de las letras.
        Console::ForegroundColor = ConsoleColor::Yellow;
    
        Console::WriteLine(Marshal::PtrToStringAuto(Mensaje()));
        Console::WriteLine(Suma(1764, -764));
    
        // Pulse cualquier tecla para salir.
        Console::ReadKey();
        return 0;
    }

    Curiosamente se me meta el ejecutable de los C++ en esta dirección en el directorio donde se crea la dll.

    C:\Users\Meta\Documents\Visual Studio 2019\Projects\Super_DLL\x64\Debug

    Gracias por todo.


    http://electronica-pic.blogspot.com

    • Marcado como respuesta Metaconta domingo, 21 de junio de 2020 11:44
    sábado, 20 de junio de 2020 21:22
  • Hola,

     

    gracias por confirmar que encontraste una respuesta a tu pregunta.

     

    Saludos cordiales

     

    Gabriel Castro

    jueves, 16 de julio de 2020 1:51