elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


  Mostrar Mensajes
Páginas: 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 ... 237
131  Programación / Scripting / ¿CMD, PowerShell, Python es capaz de leer un archivo.dll de C++ nativo? en: 20 Junio 2020, 02:41 am
Buenos días compañeros.

No tengo idea de PowerShell. He creado una dll con Visual C++ nativo y a 64 bits. Hice un ejemplo con una interfaz de consola C# y me lee la dll de C++ nativo.

Dejo un ejemplo.

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

DLL hecho con C++:

Código
  1. // dllmain.cpp : Define el punto de entrada de la aplicación DLL.
  2. #include "pch.h"
  3.  
  4. BOOL APIENTRY DllMain( HMODULE hModule,
  5.                       DWORD  ul_reason_for_call,
  6.                       LPVOID lpReserved
  7.                     )
  8. {
  9.    switch (ul_reason_for_call)
  10.    {
  11.    case DLL_PROCESS_ATTACH:
  12.    case DLL_THREAD_ATTACH:
  13.    case DLL_THREAD_DETACH:
  14.    case DLL_PROCESS_DETACH:
  15.        break;
  16.    }
  17.    return TRUE;
  18. }
  19.  
  20. extern "C"
  21. {
  22.    __declspec(dllexport)  int WINAPI Suma(int, int);
  23.    __declspec(dllexport) LPTSTR WINAPI Mensaje();
  24. };
  25.  
  26. // Suma.
  27. int WINAPI Suma(int a, int b) { return a + b; }
  28.  
  29. // Mensaje.
  30. LPTSTR WINAPI Mensaje() { return LPTSTR(L"Hola. Soy una dll de C++ nativo."); }


El archivo dll que he creado se llama MyDLL.dll y quiero saber si PowerShell es capaz de leer las dll y que funciona. Esta dll solo hace una suma y muestra un mensaje en pantalla.

¿Es posible que PowerShell sea capaz de leer una dll?

Si es cierto. ¿Cómo se hace?

Un cordial saludos.
132  Programación / .NET (C#, VB.NET, ASP) / Incluye un tutorial y quiero saber que dll escoger del proyecto. en: 19 Junio 2020, 22:41 pm
Buenas:

Tengo un proyecto en el cual creé una dll, solo se actualiza una vez y está en esta dirección.
C:\Users\Meta\Documents\Visual Studio 2019\Projects\MyDLL\Debug\MyDLL.dll.

Lo curioso que cambié el texto de la dll para que me diga otra cosa, y la dirección de arriba no se actualiza pero es la dll que funciona. Se actualiza otra copia en otro directorio indicado abajo.
C:\Users\Meta\Documents\Visual Studio 2019\Projects\MyDLL\x64\Debug\MyDLL.dll.

Si uso esta dll llevándolo a la interfaz creada en la consola de C#, no funciona, me da este error.
Citar
System.BadImageFormatException: 'Se ha intentado cargar un programa con un formato incorrecto. (Excepción de HRESULT: 0x8007000B)'

Da igual que haga volver a compilar la dll, recopilar, limpiar  copilar de nuevo, nunca actualiza la dll que si funciona.

Dejo un tutorial en pdf de los pasos que he hecho para que entiendan lo que estoy diciendo, más bien, escribiendo.
Ver turorial en pdf.

Muchas gracias.
133  Programación / Programación C/C++ / Re: Leer dll en consola win32 en: 19 Junio 2020, 01:02 am
Voy a probarlo. Lo hago por curiosidad tu propuesta y muchas gracias.

Mi idea es crear un archivo.dll independiente, distribuirlo y la gente lo use con su propia interfaz esta vez hecho en C+++ nativo.

;)

Edito:

Código
  1. #pragma comment( lib, "super_dll" )
  2. #include <iostream>
  3. #include <windows.h>
  4.  
  5. extern int WINAPI Suma(int, int);
  6. extern LPTSTR WINAPI Mensaje();
  7.  
  8. int main()
  9. {
  10.    std::cout << Mensaje();
  11.    std::cout << Suma(1764, -764);
  12.  
  13.    // Esperando pulsar Enter para salir.
  14.    std::cin.get();
  15.    return 0;
  16. }

Citar
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
134  Programación / Programación C/C++ / Re: Leer dll en consola win32 en: 18 Junio 2020, 16:01 pm
A ver si me sale como en el truco de importal la dll externa que está al lado del ejecutable.

Código
  1. #include <iostream>
  2. #include <windows.h>
  3.  
  4. __declspec(dllexport) int WINAPI Suma(int, int);
  5. __declspec(dllexport) LPTSTR WINAPI Mensaje();
  6.  
  7. int main()
  8. {
  9.    std::cout << Mensaje();
  10.    std::cout << Suma(1764, -764);
  11.  
  12.    // Esperando pulsar Enter para salir.
  13.    std::cin.get();
  14.    return 0;
  15. }

Voy a caminar un rato por el monte a despejarme la cabeza antes que me de un derrame cerebral o estrés post-traumático.

Por la noche vuelvo.
135  Programación / Programación C/C++ / Re: Leer dll en consola win32 en: 18 Junio 2020, 14:23 pm
Da problemas como puse arriba.

Lo que quiero, para dejarlo más claro. Creé una dll de C++ nativo o win32.

Código
  1. #include "pch.h"
  2. #include "Super_dll.h"
  3.  
  4. extern "C" {
  5. __declspec(dllexport) int WINAPI Suma(int, int);
  6. __declspec(dllexport) LPTSTR WINAPI Mensaje();
  7. };
  8.  
  9. // Suma.
  10. int WINAPI Suma(int a, int b) { return a + b; }
  11.  
  12. // Mensaje.
  13. LPTSTR WINAPI Mensaje() { return LPTSTR(L"Hola. Soy una DLL Win32 escrito en C++."); }

Físicamente el archivo se llama Super_dll.dll.

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

Me lee la dll como muestra abajo de ejemplo.


La interfaz hecho con la consola de C# ha leído la dll hecho con C++ nativo o win32.

Quiero hacer exactamente lo mismo, la dll es la misma, y está el archivo Super_dll.dll al lado del ejecutable. En este caso, la interfaz en vez de ser en C#, lo quiero hacer en consola en C++ nativo o win32.

Hice pruebas hasta con VB .net de la interfaz leyendo la dll y funciona.
Código:
Imports System.Runtime.InteropServices
Module Module1

    Sub Main()
        ' Título de la ventgana.
        Console.Title = "Consola VB 2019"

        ' Tamaño de la ventana.
        Console.SetWindowSize(40, 5)

        ' Color de las letras.
        Console.ForegroundColor = ConsoleColor.Cyan

        Console.WriteLine(Marshal.PtrToStringAuto(SUPER_DLL.Mensaje()))
        Console.WriteLine(SUPER_DLL.Suma(1764, -764).ToString())

        ' Pulse cualquier tecla para salir.
        Console.ReadKey()
    End Sub

    Friend Class SUPER_DLL
        <DllImport("Super_dll.dll")>
        Public Shared Function Suma(ByVal a As Integer, ByVal b As Integer) As Integer

        End Function
        <DllImport("Super_dll.dll")>
        Public Shared Function Mensaje() As IntPtr

        End Function
    End Class

End Module

La interfaz en C++ se me resiste tal como la quiero.

Lo curioso, haciendo pruebas con la interfaz en C++ del CLR o .net, también me da quebraderos de cabeza.
Código
  1. #include "pch.h"
  2.  
  3. using namespace System;
  4.  
  5.    [DllImport("Super_dll.dll")]
  6.    extern int Suma(int a, int b);
  7.    [DllImport("Super_dll.dll")]
  8.    extern IntPtr Mensaje();
  9.  
  10.  
  11. int main(array<System::String ^> ^args)
  12. {
  13.    // T&#237;tulo de la ventana.
  14.    Console::Title = "Consola C++ CLR 2019";
  15.  
  16.    // Tama&#241;o de la ventana.
  17.    Console::SetWindowSize(40, 5);
  18.  
  19.    // Color de las letras.
  20.    Console::ForegroundColor = ConsoleColor::Yellow;
  21.  
  22.    Console::WriteLine(Mensaje());
  23.    Console::WriteLine(Suma(1764, -764).ToString());
  24.  
  25.    // Pulse cualquier tecla para salir.
  26.    Console::ReadKey();
  27.    return 0;
  28. }
  29.  

Errores.
Gravedad   Código   Descripción   Proyecto   Archivo   Línea   Estado suprimido
Error   C2337   'DllImport': no se encontró el atributo   Consola_clr_cpp   C:\Users\Usuario\Documents\Visual Studio 2019\Projects\Super_DLL\Consola_clr_cpp\Consola_clr_cpp.cpp   7   


;)
136  Programación / Programación C/C++ / Re: Leer dll en consola win32 en: 18 Junio 2020, 13:29 pm
Por lo que te he entendido, parece que es algo así.

Código
  1. #include <iostream>
  2. #include <windows.h>
  3.  
  4. extern "C"
  5. {
  6.    int WINAPI Suma(int a, int b);
  7.    LPTSTR WINAPI Mensaje();
  8. };
  9.  
  10. int main()
  11. {
  12.    std::cout << Mensaje();
  13.    std::cout << Suma(1764, -764);
  14.  
  15.    // Esperando pulsar Enter para salir.
  16.    std::cin.get();
  17.    return 0;
  18. }
137  Programación / Programación C/C++ / Re: Leer dll en consola win32 en: 18 Junio 2020, 12:52 pm
Sigo pescando...

Parece ser que la primera opción es más cómodo por decirlo de alguna manera.

¿Este código de abajo lo pongo en un archivo en cabecera llamado Consola_win32_cpp.h?

Código
  1. extern "C"
  2. {
  3. int WINAPI Suma(int a, int b);
  4. LPTSTR WINAPI Mensaje();
  5. };

¿Y en el archivo Consola_win32_cpp.cpp este otro?
Código
  1. #include <iostream>
  2. #include <windows.h>
  3.  
  4. int main()
  5. {
  6.    std::cout << Marshal.PtrToStringAuto(SUPER_DLL.Mensaje());
  7.    std::cout << SUPER_DLL.Suma(1764, -764).ToString();
  8.  
  9.    // Esperando pulsar Enter para salir.
  10.    std::cin.get();
  11.    return 0;
  12. }

No me sale.

Y sin cabecera lo he intentado hacerlo así:
Código
  1. #include <iostream>
  2. #include <windows.h>
  3.  
  4. int main()
  5. {
  6.    std::cout << Marshal->PtrToStringAuto(C->Mensaje());
  7.    std::cout << C->Suma(1764, -764)->ToString();
  8.  
  9.    // Esperando pulsar Enter para salir.
  10.    std::cin.get();
  11.    return 0;
  12. }
  13.  
  14. extern "C"
  15. {
  16.    int WINAPI Suma(int a, int b);
  17.    LPTSTR WINAPI Mensaje();
  18. };

Tampoco funciona.
138  Programación / Programación C/C++ / Leer dll en consola win32 en: 18 Junio 2020, 10:27 am
Buenas:

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

Código C#:

Código
  1. using System;
  2. using System.Runtime.InteropServices;
  3.  
  4. namespace Consola_cs
  5. {
  6.    class Program
  7.    {
  8.        static void Main(string[] args)
  9.        {
  10.            Console.WriteLine(Marshal.PtrToStringAuto(SUPER_DLL.Mensaje()));
  11.            Console.WriteLine(SUPER_DLL.Suma(1764, -764).ToString());
  12.  
  13.            // Pulse cualquier tecla para salir.
  14.            Console.ReadKey();
  15.        }
  16.        internal class SUPER_DLL
  17.        {
  18.            [DllImport("Super_dll.dll")]
  19.            extern static public int Suma(int a, int b);
  20.            [DllImport("Super_dll.dll")]
  21.            extern static public IntPtr Mensaje();
  22.        }
  23.    }
  24. }


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

Código C++ Win32:

Código
  1. #include <iostream>
  2. #include <windows.h>
  3.  
  4. int main()
  5. {
  6.    std::cout << Marshal.PtrToStringAuto(SUPER_DLL.Mensaje());
  7.    std::cout << SUPER_DLL.Suma(1764, -764).ToString();
  8.  
  9.    // Esperando pulsar Enter para salir.
  10.    std::cin.get();
  11.    return 0;
  12. }
  13.  
  14. internal class SUPER_DLL
  15. {
  16.    [DllImport("Super_dll.dll")]
  17.    extern static public int Suma(int a, int b);
  18.    [DllImport("Super_dll.dll")]
  19.    extern static public IntPtr Mensaje();
  20. }
  21.  
Documento de aquí.


¿Alguna idea?

Saludos.
139  Programación / Scripting / Re: Probando este código en: 17 Junio 2020, 21:17 pm
Lo he instalado ahora y lo he cambiado.



Me sale con otro error.

Citar
Can't find a usable init.tcl in the following directories:
    C:/Python27/lib/tcl8.5 {C:/Users/Meta/Documents/Visual Studio 2019/Projects/Python_consola_01/Python_consola_01/env1/lib/tcl8.5} {C:/Users/Meta/Documents/Visual Studio 2019/Projects/Python_consola_01/Python_consola_01/lib/tcl8.5} {C:/Users/Meta/Documents/Visual Studio 2019/Projects/Python_consola_01/Python_consola_01/env1/library} {C:/Users/Meta/Documents/Visual Studio 2019/Projects/Python_consola_01/Python_consola_01/library} {C:/Users/Meta/Documents/Visual Studio 2019/Projects/Python_consola_01/Python_consola_01/tcl8.5.15/library} {C:/Users/Meta/Documents/Visual Studio 2019/Projects/Python_consola_01/tcl8.5.15/library}



This probably means that Tcl wasn't installed properly.

Precisamente en la primera línea.

root = Tkinter.Tk()
140  Programación / .NET (C#, VB.NET, ASP) / Re: Corregir este programa en: 17 Junio 2020, 19:54 pm
Editado el primer post, que me olvidé de poner el código completo.
Páginas: 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 ... 237
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines