none
Leer dll en consola win32 RRS feed

  • Pregunta

  • Buenas:

    Tengo un ejemplo en C# para leer una dll hecho en C++ Win32.

    Código C#:

    using System;
    using System.Runtime.InteropServices;
    
    namespace Consola_cs
    {
        class Program
        {
            static void Main(string[] args)
            {
                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();
            }
        }
    }


    Quiero adaptarlo la consola en Win32, pero me da errores.

    Código C++ Win32:

    #include <iostream>
    #include <windows.h>
    
    int main()
    {
        std::cout << Marshal.PtrToStringAuto(SUPER_DLL.Mensaje());
        std::cout << SUPER_DLL.Suma(1764, -764).ToString();
    
        // Esperando pulsar Enter para salir.
        std::cin.get();
        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();
    }

    Documento de aquí.


    ¿Alguna idea?

    Saludos.


    http://electronica-pic.blogspot.com


    • Editado Metaconta jueves, 18 de junio de 2020 8:25
    jueves, 18 de junio de 2020 8:24

Todas las respuestas

  • Deleted
    jueves, 18 de junio de 2020 13:07
  • Buenas.

    ¿Qué ventaja tiene una con la otra y por qué?

    Salu2.


    http://electronica-pic.blogspot.com

    jueves, 18 de junio de 2020 15:24
  • Deleted
    jueves, 18 de junio de 2020 15:39
  • Tengo entendido.

    El archivo.lib a la hora de compilar, se añade este archivo al ejecutable, en el cual crece su tamaño.

    El archivo.dll siempre es a parte, en el ejecutable tiene el enlace para localizar su ubicación y carga en memoria solo si es invocado.

    En realidad alguna ventaja tiene sobre la otra en algunos aspectos.

    Saludo.


    http://electronica-pic.blogspot.com


    • Editado Metaconta jueves, 18 de junio de 2020 21:37
    jueves, 18 de junio de 2020 20:25
  • Deleted
    jueves, 18 de junio de 2020 22:31
  • Gracias por la aclaración.

    #include <iostream>
    #include <windows.h>
    
    __declspec(dllexport) int WINAPI Suma(int, int);
    __declspec(dllexport) LPTSTR WINAPI Mensaje();
    
    int main()
    {
        std::cout << Mensaje();
        std::cout << Suma(1764, -764);
    
        // Esperando pulsar Enter para salir.
        std::cin.get();
        return 0;
    }

    Intenté hacerlo así, pero no me sale.

    Supuestamente en C# si me lee la dll sin tantos problemas y lías en la cabeza. Tiene que mostrar esto abajo.

    Jesús, María y José. Un poco más, me tiro por un puente.

    ¿Qué me falta para hacerlo funcionar de una vez por todas?

    En esta ocasión, solo quiero la interfaz en vez de ser C#, pues C++ nativo o win32 y que funcione.

    Saludos.


    http://electronica-pic.blogspot.com


    • Editado Metaconta jueves, 18 de junio de 2020 22:45
    jueves, 18 de junio de 2020 22:44
  • Deleted
    jueves, 18 de junio de 2020 23:07
  • Me sale este error.

    Gravedad    Código    Descripción    Proyecto    Archivo    Línea    Estado suprimido
    Error    LNK1104    no se puede abrir el archivo 'super_dll.lib'    Consola_win32_cpp    C:\Users\Meta\Documents\Visual Studio 2019\Projects\Super_DLL\Consola_win32_cpp\LINK    1    


    Me iimagino que se carga un .lib desde aquí.

    Creo un archivo llamado Super_dll.lib.

    ¿Qué pongo en su interior?

    Saludos.

    • Editado Metaconta viernes, 19 de junio de 2020 0:11
    jueves, 18 de junio de 2020 23:53
  • Deleted
    viernes, 19 de junio de 2020 1:31
  • Buenas campeón.

    ¿Puedes decirme paso a paso dónde saco el archivo .lib y donde colocarlo?

    Saludos.


    http://electronica-pic.blogspot.com

    viernes, 19 de junio de 2020 23:15
  • Deleted
    sábado, 20 de junio de 2020 0:40
  • A parte del colocar Super_dll.lib en la carpeta donde tengo el .cpp.

    ¿Tengo que configurar algo en algún lado?Lo pregunto porque haybía que hacer algo con el Super_dll.def a la hora de crear la dll. Ahora estamos con la interfaz de C++ nativo.


    http://electronica-pic.blogspot.com

    sábado, 20 de junio de 2020 6:49