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


 


Tema destacado: Únete al Grupo Steam elhacker.NET


  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 ... 229
61  Programación / Programación C/C++ / Re: Leer dll en consola win32 en: 3 Julio 2020, 16:20
Cierto, me despisté.

Código
  1. wcout << mensaje() << endl;

Ahora sí que me lee hasta el alma. Por fin funciona. Muchísimas gracias mi muy distinguido amigo.

Añadido abajo un ejemplo de poner un título, tamaño de la ventana, posición del cursor, corrección textos con tildes...

Código
  1. #include <iostream>
  2. #include <windows.h> // Para mostrar texto en el título de la ventana.
  3.  
  4. using namespace std;
  5. //using std::cout;
  6. //using std::cin;
  7.  
  8. // Función posición del cursor.
  9. void gotoxy(int x, int y)
  10. {
  11. HANDLE hcon;
  12. hcon = GetStdHandle(STD_OUTPUT_HANDLE);
  13. COORD dwPos;
  14. dwPos.X = x;
  15. dwPos.Y = y;
  16. SetConsoleCursorPosition(hcon, dwPos);
  17. }
  18.  
  19. // Definir estas funciones.
  20. typedef  int(__stdcall* Suma)(int, int);
  21. typedef LPTSTR(__stdcall* Mensaje)();
  22.  
  23. int main(void)
  24. {
  25. // Importar dll.
  26. HINSTANCE hDLL = 0;
  27. Suma suma;
  28. Mensaje mensaje;
  29.  
  30. hDLL = LoadLibrary(L"C:\\Users\\Usuario\\Documents\\Visual Studio 2019\\Projects\\Super_DLL\\x64\\Debug\\Super_dll.dll");
  31. suma = (Suma)GetProcAddress(hDLL, "Suma");
  32. mensaje = (Mensaje)GetProcAddress(hDLL, "Mensaje");
  33.  
  34. // Mostrar caracteres correctamente en pantalla y título de la ventana.
  35. SetConsoleOutputCP(65001);
  36. wchar_t titulo[128];
  37. MultiByteToWideChar(CP_UTF8, 0, "Interfaz leer dll C++ nativo 2019.", -1, titulo, 128);
  38. SetConsoleTitle(titulo);
  39.  
  40. // Tamaño de la pantalla. Se cambia en los dos últimos dígitos.
  41. SMALL_RECT r = { 0, 0, 49, 9 }; // X = 49, Y = 9.
  42. SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &r);
  43.  
  44. // Ocultar cursor.
  45. CONSOLE_CURSOR_INFO cci;
  46. GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
  47. cci.bVisible = 0; // 0 oculta. 1 muestra cursor.
  48. SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
  49.  
  50. // Posición del cursor.
  51. gotoxy(10, 3);
  52.  
  53. // Mostrar textos en pantalla.
  54. wcout << mensaje() << endl;
  55. cout << suma(1764, -764) << endl;
  56.  
  57. FreeLibrary(hDLL);
  58.  
  59. // Esperando pulsar Enter para salir.
  60. cin.get();
  61. return 0;
  62. }

Gracias por todo.
 ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)

PD: Código de C# arriba quitado.
62  Programación / Programación C/C++ / Re: Leer dll en consola win32 en: 3 Julio 2020, 15:48
Hola:

Todavía con esto, la verdad es que si. Descansé un poco haciendo otros programas de cálculos de litros de un depósito en C#, ajajajjajajajajjaa, pero funciona. Siguiendo el tema. Voy a comentar poco a poco los pasos.

Creo la dll llamada Super_dll.dll. El archivo del código fuente es esto.

Super_dll.cpp:
Código
  1. #include "pch.h"
  2.  
  3. extern "C" {
  4.    __declspec(dllexport)  int WINAPI Suma(int, int);
  5.    __declspec(dllexport) LPTSTR WINAPI Mensaje();
  6. };
  7.  
  8. // Suma.
  9. //int WINAPI Suma(int a, int b) { return a + b; }
  10. int __stdcall Suma(int a, int b) { return a + b; }
  11.  
  12. // Mensaje.
  13. //LPTSTR WINAPI Mensaje() { return LPTSTR(L"Hola. Saludos desde la dll."); }
  14. LPTSTR __stdcall Mensaje() { return LPTSTR(L"Hola. Saludos desde la dll."); }

Consola_win32_cpp.cpp:
Código
  1. #include <iostream>
  2. #include <windows.h>
  3.  
  4. using namespace std;
  5.  
  6. typedef  int(__stdcall* Suma)(int, int);
  7. typedef LPTSTR(__stdcall* Mensaje)();
  8.  
  9. int main()
  10. {
  11.    HINSTANCE hDLL = 0;
  12.    Suma suma;
  13.    Mensaje mensaje;
  14.  
  15.    hDLL = LoadLibrary(L"C:\\Users\\Usuario\\Documents\\Visual Studio 2019\\Projects\\Super_DLL\\x64\\Debug\\Super_dll.dll");
  16.    suma = (Suma)GetProcAddress(hDLL, "Suma");
  17.    mensaje = (Mensaje)GetProcAddress(hDLL, "Mensaje");
  18.  
  19.    cout << mensaje() << endl;
  20.    cout << suma(1764, -764) << endl;
  21.  
  22.    FreeLibrary(hDLL);
  23.  
  24.    // Esperando pulsar Enter para salir.
  25.    cin.get();
  26.    return 0;
  27. }

Super_dll.def:
Código:
LIBRARY Super_dll
EXPORTS
Suma
Mensaje

La buena noticia que por fin me lee la dll. La no tan buena, en vez de mostrar el texto desde la dll, se muestran números.
Código
  1. 00007FFD54CC9880
  2. 1000

Pensaba usar en Marshal.
Código
  1. cout << Marshal.PtrToStringAuto(mensaje()) << endl;

Se que si uso el Marshal, los números se verán el texto de la dll.

Ahora estoy chasmusqueándome las neuronas por esto. De alguna forma se tiene que poder. Al menos el paso que hemos dado, es que lea la dll. Todavía necesito ayuda.

Gracias por todo.

63  Programación / .NET (C#, VB.NET, ASP) / Calcular Litros de agua en portenje cambiando el valor de la altura en: 2 Julio 2020, 09:54
Lo tengo en unidades de metros.

Quiero calcular un cilindro como este, su volumen.


h = altura.
r = radio.
v = volumen.



Aquí hice un pequeño programa en la consola C# que calcula solo introduciendo dos valores, el radio del cilindro o depósito de agua y la altura.

Código
  1. using System;
  2.  
  3. namespace namespace_Calculo_cilindro_consola_02_cs
  4. {
  5.    class Program
  6.    {
  7.        static void Main(string[] args)
  8.        {
  9.            Console.Title = "Cálculo geométrico cilindro - C# 2019";
  10.            Console.SetWindowSize(50, 25);
  11.  
  12.            // Variables.
  13.            double Pi = 3.14;
  14.            double radio = 0;
  15.            double altura = 0;
  16.            double areaLateral = 0;
  17.            double areaTotal = 0;
  18.            double volumen = 0;
  19.            double litros = 0;
  20.  
  21.            Console.WriteLine("===== Área lateral =====");
  22.            Console.Write("Introduce el radio en m.: ");
  23.            radio = double.Parse(Console.ReadLine());
  24.            Console.Write("Introduce la altura en m.: ");
  25.            altura = double.Parse(Console.ReadLine());
  26.  
  27.            // Cálculo área lateral.
  28.            areaLateral = 2 * Pi * radio * altura;
  29.  
  30.            Console.WriteLine("Área lateral = 2 x Pi x radio x altura.");
  31.            Console.ForegroundColor = ConsoleColor.Green;
  32.            Console.WriteLine("Área lateral: {0} m^2. (Metros cuadrados). \n", areaLateral);
  33.  
  34.            Console.ForegroundColor = ConsoleColor.Gray;
  35.            Console.WriteLine("===== Área total =====");
  36.  
  37.            // Cálculo área Total.
  38.            areaTotal = areaLateral + 2 * (Pi * (radio * radio));
  39.  
  40.            Console.WriteLine("Área total = Áreal lateral + 2 x (Pi x r^2)");
  41.            Console.ForegroundColor = ConsoleColor.Yellow;
  42.            Console.WriteLine("Área total = {0} m^2. \n", areaTotal);
  43.  
  44.            Console.ForegroundColor = ConsoleColor.Gray;
  45.            Console.WriteLine("===== Volumen =====");
  46.            Console.WriteLine("Volumen = Pi x radio^2 x altura");
  47.  
  48.            // Cálculo volumen.
  49.            volumen = Pi * (radio * radio) * altura;
  50.  
  51.            Console.ForegroundColor = ConsoleColor.Cyan;
  52.            Console.WriteLine("Volumen = {0} m^3. (Metros cúbicos). \n", volumen);
  53.  
  54.            Console.ForegroundColor = ConsoleColor.Gray;
  55.            Console.WriteLine("===== Litros =====");
  56.            Console.WriteLine("Litros = Volumen * 1000");
  57.            Console.WriteLine("Litros = {0} m^3 * 1000", volumen);
  58.  
  59.            // Cálculo litros.
  60.            litros = volumen * 1000;
  61.  
  62.            Console.ForegroundColor = ConsoleColor.Red;
  63.            Console.WriteLine("Litros = {0}", litros + " L.\n");
  64.  
  65.            Console.ForegroundColor = ConsoleColor.Gray;
  66.            Console.WriteLine("FIN DE PROGRAMA. Pulse cualquier tecla para salir.");
  67.            // Pulse cualquier tecla para salir.
  68.            Console.ReadLine();
  69.        }
  70.    }
  71. }
  72.  



Me falta hacer una fórmula que no se hacer sobre saber que cantidad de litros tengo en este depósito de agua o cilindro. Por ejemplo, ya que la altura es de 0 a 2 metros, quiero saber que si cambio la altura del agua, por ejemplo que está a 0.7 metros, que me muestre el porcentaje en %. Está claro que si está el nivel del agua a 2 metros de altura que es la máxima, será el 100 %.

1. Si la altura está en 0.7 metros. ¿Qué porcentaje muestra?

2. ¿Qué cantidad de Litros de agua hay cuando está el nivel de agua a 0.7 metros?

Solo me falta saber estas dos cosas en papel. Luego lo transformo en C#.

Saludos.
64  Programación / Programación C/C++ / Re: Leer dll en consola win32 en: 2 Julio 2020, 01:10
Teniendo el archivo este como siempre.

Código
  1. #include <iostream>
  2. #include <windows.h>
  3. using namespace std;
  4.  
  5. extern int WINAPI Suma(int, int);
  6. extern LPTSTR WINAPI Mensaje();
  7.  
  8. int main()
  9. {
  10.    // Mostrar texto desde la dll.
  11.    cout << Mensaje();
  12.  
  13.    // Mostrar esta suma desde la dll.
  14.    cout << Suma(1764, -764);
  15.  
  16.    // Esperando pulsar Enter para salir.
  17.    cin.get();
  18.    return 0;
  19. }

Me muestra los mensajes de estos errores.

Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido
Error LNK2019 símbolo externo "int __cdecl Suma(int,int)" (?Suma@@YAHHH@Z) sin resolver al que se hace referencia en la función main Consola_win32_cpp C:\Users\Meta\Documents\Visual Studio 2019\Projects\Super_DLL\Consola_win32_cpp\Consola_win32_cpp.obj 1




Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido
Error LNK2019 símbolo externo "wchar_t * __cdecl Mensaje(void)" (?Mensaje@@YAPEA_WXZ) sin resolver al que se hace referencia en la función main Consola_win32_cpp C:\Users\Meta\Documents\Visual Studio 2019\Projects\Super_DLL\Consola_win32_cpp\Consola_win32_cpp.obj 1

¿Alguna idea de qué está el IDE alegando?

Saludos.
65  Programación / Scripting / Re: Probando este código en: 2 Julio 2020, 01:09
Ya funciona gracias a todos.
66  Programación / Programación C/C++ / Re: Leer dll en consola win32 en: 21 Junio 2020, 00:02
Parece que tiene que ser justo ahí.



67  Programación / Programación C/C++ / Re: Leer dll en consola win32 en: 20 Junio 2020, 20:44
Lo pongo aquí dentro del proyecto de la interfaz C++ nativo, no de la dll.



Son dos proyectos en la misma solución. Una para dll de C++ nativo a 64 bits. Luego la consola tambiñen de C++ nativo.

Sigue con el mismo error.
68  Programación / Scripting / ¿CMD, PowerShell, Python es capaz de leer un archivo.dll de C++ nativo? en: 20 Junio 2020, 02:41
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.
69  Programación / .NET (C#, VB.NET, ASP) / Incluye un tutorial y quiero saber que dll escoger del proyecto. en: 19 Junio 2020, 22:41
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.
70  Programación / Programación C/C++ / Re: Leer dll en consola win32 en: 19 Junio 2020, 01:02
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
Páginas: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ... 229
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines