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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Mensajes
Páginas: 1 ... 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [30] 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 ... 254
291  Programación / Programación C/C++ / Re: Prueba leer la dll nativo con interfaz C++ nativo en: 6 Julio 2020, 10:00 am
Lo he puesto tiplo float a todos por si acaso.

Código:
	// Mitad de la barra para que no sea muy grande en la pantalla.
mitadBarra = resultadoPorcentaje(0, 0, 0) / 2;



Por lo que veo, tengo el diseño mal.

Código:
// Cálculo porcentaje en % del litro de agua.
float __stdcall ResultadoPorcentaje(float resultadoPorcentaje, float nivelAgua, float altura)
{
    return resultadoPorcentaje = nivelAgua * (100 / altura);
}

Ya que solamente necesito el valor de resultadoPorcentaje para añadirlo en un cout << "Tanto porciernto: " << resultadoPorcentaje << endl;
292  Programación / Programación C/C++ / Prueba leer la dll nativo con interfaz C++ nativo en: 6 Julio 2020, 00:49 am
Hola:

Haciendo otras pruebas.

Creo el archivo dll.
Código
  1. #include "pch.h"
  2.  
  3. extern "C"
  4. {
  5.    __declspec(dllexport) LPTSTR __stdcall Mensaje();
  6.    __declspec(dllexport) float __stdcall Volumen(float, float, float, float);
  7.    __declspec(dllexport) float __stdcall Litros(float, float);
  8.    __declspec(dllexport) float __stdcall ResultadoPorcentaje(float, float, float);
  9.    __declspec(dllexport) float __stdcall VolumenLitros(float, float, float, float, float);
  10.    __declspec(dllexport) float __stdcall CantidadTubosLitros(float, float, float);
  11.    __declspec(dllexport) float __stdcall TotalLitros(float, float, float);
  12. };
  13.  
  14. // Mensaje.
  15. LPTSTR __stdcall Mensaje() { return LPTSTR(L"Hola. Saludos desde la dll. Versión: 1.0.0"); }
  16.  
  17. // Cálculo volumen.
  18. float __stdcall Volumen(float volumen, float PI, float radio, float altura)
  19. {
  20.    return volumen = PI * (radio * radio) * altura;
  21. }
  22.  
  23. // Cálculo litros.
  24. float __stdcall Litros(float litros, float volumen)
  25. {
  26.    return litros = volumen * 1000;
  27. }
  28.  
  29. // Cálculo porcentaje en % del litro de agua.
  30. float __stdcall ResultadoPorcentaje(float resultadoPorcentaje, float nivelAgua, float altura)
  31. {
  32.    return resultadoPorcentaje = nivelAgua * (100 / altura);
  33. }
  34.  
  35. // Cálculo litros de agua.
  36. float __stdcall VolumenLitros(float volumenLitros, float PI, float radio, float nivelAgua, float resultadoLitros)
  37. {
  38.    return volumenLitros = PI * (radio * radio) * nivelAgua;
  39.    return resultadoLitros = volumenLitros * 1000;
  40. }
  41.  
  42. // Cálculo litros por cantidad de tubos
  43. float __stdcall CantidadTubosLitros(float cantidadTubosLitros, float cantidadTubos, float resultadoLitros)
  44. {
  45.    return cantidadTubosLitros = cantidadTubos * resultadoLitros;
  46. }
  47.  
  48. // Cálculo cantidad de litros con total de tubos.
  49. float __stdcall TotalLitros(float totalLitros, float litros, float cantidadTubos)
  50. {
  51.    return totalLitros = litros * cantidadTubos;
  52. }

Luego el deb.
Código
  1. LIBRARY DLL_al_poder
  2. EXPORTS
  3. Mensaje
  4. Volumen
  5. Litros
  6. ResultadoPorcentaje
  7. VolumenLitros
  8. CantidadTubosLitros
  9. TotalLitros

Y la interfaz de C++ nativo para que lea la dll.
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 LPTSTR(__stdcall* Mensaje)();
  21. typedef float(__stdcall* Volumen)(float, float, float, float);
  22. typedef float(__stdcall* Litros)(float, float);
  23. typedef float(__stdcall* ResultadoPorcentaje)(float, float, float);
  24. typedef float(__stdcall* VolumenLitros)(float, float, float, float, float);
  25. typedef float(__stdcall* CantidadTubosLitros)(float, float, float);
  26. typedef float(__stdcall* TotalLitros)(float, float, float);
  27.  
  28. int main(void)
  29. {
  30. // Variables.
  31. const double Pi = 3.14;
  32. float radio;
  33. float altura;
  34. //double volumen;
  35. //double litros;
  36. float nivelAgua;
  37. //float resultadoPorcentaje;
  38. //double resultadoLitros;
  39. //double volumenLitros;
  40. float mitadBarra;
  41. float cantidadTubos;
  42. //double cantidadTubosLitros;
  43. //double totalLitros;
  44.  
  45. // Importar dll.
  46. HINSTANCE hDLL = 0;
  47. Mensaje mensaje;
  48. Volumen volumen;
  49. Litros litros;
  50. ResultadoPorcentaje resultadoPorcentaje;
  51. VolumenLitros volumenLitros;
  52. CantidadTubosLitros cantidadTubosLitros;
  53. TotalLitros totalLitros;
  54.  
  55. hDLL = LoadLibrary(L"C:\\Users\\Meta\\Documents\\Visual Studio 2019\\Projects\\DLL_y_interfaz_nativo_01_cpp\\Debug\\DLL_y_interfaz_nativo_01_cpp.dll");
  56. mensaje = (Mensaje)GetProcAddress(hDLL, "Mensaje");
  57. volumen = (Volumen)GetProcAddress(hDLL, "Volumen");
  58. litros = (Litros)GetProcAddress(hDLL, "Litros");
  59. resultadoPorcentaje = (ResultadoPorcentaje)GetProcAddress(hDLL, "ResultadoPorcentaje");
  60. volumenLitros = (VolumenLitros)GetProcAddress(hDLL, "VolumenLitros");
  61. cantidadTubosLitros = (CantidadTubosLitros)GetProcAddress(hDLL, "CantidadTubosLitros");
  62. totalLitros = (TotalLitros)GetProcAddress(hDLL, "totalLitros");
  63.  
  64. // Mostrar caracteres correctamente en pantalla y título de la ventana.
  65. SetConsoleOutputCP(65001);
  66. wchar_t titulo[128];
  67. MultiByteToWideChar(CP_UTF8, 0, "Interfaz leer dll C++ nativo 2019.", -1, titulo, 128);
  68. SetConsoleTitle(titulo);
  69.  
  70. // Tamaño de la pantalla. Se cambia en los dos últimos dígitos.
  71. SMALL_RECT r = { 0, 0, 49, 35 }; // X = 49, Y = 9.
  72. SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &r);
  73.  
  74. // Ocultar cursor.
  75. CONSOLE_CURSOR_INFO cci;
  76. GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
  77. cci.bVisible = 1; // 0 oculta cursor. 1 muestra cursor.
  78. SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
  79.  
  80. // Posición del cursor.
  81. gotoxy(3, 2);
  82.  
  83. // Mostrar textos en pantalla.
  84. wcout << mensaje() << endl;
  85. gotoxy(0, 4);
  86. cout << "Introduce el radio en m.: ";
  87. cin >> radio;
  88. cout << "Introduce la altura en m. ";
  89. cin >> altura;
  90. cout << "Introduce altura del agua. Máximo es de " << altura << ":";
  91. cin >> nivelAgua;
  92. cout << "Introduces cantidad de tubos: ";
  93. cin >> cantidadTubos;
  94.  
  95. // ########## Dibujo de la barra.
  96. cout << "\n";
  97. cout << ("0 %                     50 %                   100 %") << endl;
  98. cout << ("&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;") << endl;
  99.  
  100. // Mitad de la barra para que no sea muy grande en la pantalla.
  101. mitadBarra = resultadoPorcentaje / 2;
  102.  
  103. if (mitadBarra > 50)
  104. {
  105. mitadBarra = 50;
  106. }
  107.  
  108. // Rellenar la barra.
  109. for (float i = 1; i <= mitadBarra; i++)
  110. {
  111. cout << ("&#9608;");
  112. }
  113.  
  114. // Si llega a 100 se pone el # en rojo.
  115.  
  116. if (resultadoPorcentaje > 100)
  117. {
  118. cout << ("#");
  119. }
  120. //########## Fin dibujo de la barra.
  121.  
  122. // Pisición del texto a mostrar.
  123. gotoxy(0, 11);
  124.  
  125. //cout << "\nPorcentaje: " << resultadoPorcentaje << " %.";
  126.  
  127.  
  128. FreeLibrary(hDLL);
  129.  
  130. // Esperando pulsar Enter para salir.
  131. cin.get();
  132. return 0;

Me salen estos errores.


No logro solucionarlo.
293  Programación / .NET (C#, VB.NET, ASP) / Guardar un dato y recuperarlo de un archivo en: 4 Julio 2020, 00:39 am
Buenas:

En este ejemplo de código gracias al equipo de este foro. Los datos de selección de un radioButton en consola C#, se guarda en la RAM o en una variable.

Quiero saber el archivo recomendado para guardar dicho dato y luego recuperarlo nada más arrancar el programa. Por supuesto, si selecciono con Enter la "> (*) Opción E", se guarda automáticamente este dato en un archivo.

¿Qué tipo de archivo aconsejable para guardar datos y recuperarlo?

Me comenta que en binario, porque es lo que trabaja las computadoras, más rápido y eficientes para ella. Para nosotros pensé en un archivo de texto txt. Para otros prefieren el XML, otros el editor de registro en el cual ahora dicen mejor no manejarlo para no saturarlo.

Alguien sabrá.

El código es este de abajo.
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace radioButton_consola_03_cs
  8. {
  9.    class Program
  10.    {
  11.        #region Variables.
  12.        private static readonly string[] TEXTO = new string[]
  13.        {
  14.            "( ) Opción A        ",
  15.            "( ) Opción B        ",
  16.            "( ) Opción C        ",
  17.            "( ) Opción D        ",
  18.            "( ) Opción E        ",
  19.            "( ) Opción F        ",
  20.            "( ) Opción G        ",
  21.            "    SALIR"
  22.        };
  23.  
  24.        private static int itemSeñalado;
  25.  
  26.        private static int itemSeleccionado;
  27.        #endregion
  28.  
  29.        static void Main(string[] args)
  30.        {
  31.            // Título de la ventana.
  32.            Console.Title = "RadioButton";
  33.  
  34.            // Tamaño de la ventana.
  35.            Console.SetWindowSize(20, 5);
  36.  
  37.            // Fondo azul.
  38.            Console.BackgroundColor = ConsoleColor.Blue;
  39.  
  40.            // Letras blanco.
  41.            Console.ForegroundColor = ConsoleColor.White;
  42.  
  43.            // Oculto el cursor.
  44.            Console.CursorVisible = false;
  45.  
  46.            // Almacena la tecla pulsada en la variable.
  47.            ConsoleKey teclaInicial;
  48.  
  49.            do
  50.            {
  51.                // Limpiar pantalla.
  52.                Console.Clear();
  53.  
  54.                // Posición del cursor del título del MENÚ PRINCIPAL.
  55.                Console.SetCursorPosition(0, 0);
  56.  
  57.                // Título.
  58.                Console.Write("   MENÚ PRINCIPAL   ");
  59.  
  60.                // Pocisión de la hora.
  61.                Console.SetCursorPosition(4, 2);
  62.  
  63.                // Formato numérico dd/MM/yyyy.
  64.                Console.Write(DateTime.Now.ToString("ddd dd MMM"));
  65.  
  66.                // Almacena en la variable una tecla pulsada.
  67.                teclaInicial = Console.ReadKey(true).Key;
  68.  
  69.                // ¿Haz pulsado la tecla Enter?
  70.                if (teclaInicial == ConsoleKey.Enter)
  71.                {
  72.                    // Sí. Se ejecuta esta función.
  73.                    MenuPrincipal();
  74.                }
  75.            } while (teclaInicial != ConsoleKey.Escape);
  76.        }
  77.  
  78.        #region Menú Principal.
  79.        private static void MenuPrincipal()
  80.        {
  81.            bool salir = false;
  82.  
  83.            // En itemSelecionado:
  84.            // -1 = Sin seleccionar con * ninguna opción.
  85.            // 0 = Seleccionar con * la Opción A.
  86.            // 1 = Seleccionar con * la Opción B.
  87.            // 2 = Seleccionar con * la opción C.
  88.            // 3 = Seleccionar con * la opción D.
  89.            // 4 = Seleccionar con * la opción E.
  90.            // 5 = Seleccionar con * la opción F.
  91.            // 6 = Seleccionar con * la opción G.
  92.  
  93.            // Capturar tecla para luego validar.
  94.            ConsoleKey tecla;
  95.  
  96.            // Cada vez que se vuelva al menú, está señalizado con el *.
  97.            itemSeñalado = 0;
  98.            int pagina;
  99.            do
  100.            {
  101.                //******************************************************************
  102.                // Dibujo el menú principal.
  103.  
  104.                // Limpiar pantalla.
  105.                Console.Clear();
  106.  
  107.                pagina = 0;
  108.                if (itemSeñalado >= 4)
  109.                {
  110.                    pagina = 4;
  111.                }
  112.  
  113.                // Recorre la lista de las opciones.
  114.                for (int k = 0; k < 4; k++)
  115.                {
  116.                    Console.SetCursorPosition(0, k);
  117.                    Console.Write(itemSeñalado == k + pagina ? "> " : "  ");
  118.                    Console.Write(TEXTO[k + pagina]);
  119.                    Console.SetCursorPosition(3, k);
  120.                    Console.Write(itemSeleccionado == k + pagina ? "*" : " ");
  121.                }
  122.  
  123.                // Fin de pintar el menú principal.
  124.                //******************************************************************
  125.  
  126.                // Leer tecla ingresada por el usuario.
  127.                tecla = Console.ReadKey(true).Key;
  128.  
  129.                switch (tecla)
  130.                {
  131.                    // Al pulsar Enter, marcas un radioButton con *.
  132.                    case ConsoleKey.Enter:
  133.                        if (itemSeñalado < 7)
  134.                        {
  135.                            itemSeleccionado = itemSeñalado;
  136.                        }
  137.                        salir = (itemSeñalado == TEXTO.Length - 1);
  138.                        break;
  139.  
  140.                    // Pulsar flecha abajo del teclado.
  141.                    case ConsoleKey.DownArrow:
  142.                        if (++itemSeñalado >= TEXTO.Length)
  143.                        {
  144.                            itemSeñalado = 0;
  145.                            Console.Clear();
  146.                        }
  147.                        else if (itemSeñalado == 4)
  148.                        {
  149.                            Console.Clear();
  150.                        }
  151.                        break;
  152.  
  153.                    // Pulsar flecha arriba del teclado.
  154.                    case ConsoleKey.UpArrow:
  155.                        if (--itemSeñalado < 0)
  156.                        {
  157.                            itemSeñalado = TEXTO.Length - 1;
  158.                            Console.Clear();
  159.                        }
  160.                        else if (itemSeñalado == 3)
  161.                        {
  162.                            Console.Clear();
  163.                        }
  164.                        break;
  165.                }
  166.                // Uso la tecla escape como salida.
  167.            } while (!salir);
  168.        }
  169.        #endregion
  170.    }
  171. }

Por supuesto. Se guarda los datos desde que se pulse Enter. Tengo entendido que el archivo a guardar si no hay ninguno o no lo detecta por ejemplo a este nombre, por ejemplo Archivo.txt. Lo crea. Si está creado, solo lo lee y guarda datos.

Desde que pulse Enter en > Salir se guarda los datos. Si pulsas la X con el ratón (mouse) de la ventana del programa, también se asegura que se cierra el archivo y tenga todo guardado por si acaso, no quiero tener error de archivos.

Saludos.
294  Programación / .NET (C#, VB.NET, ASP) / Quiero adaptar este código a otro en: 4 Julio 2020, 00:11 am
Buenas:

Teniendo un código de Python 2.x, quiero adaptarlo a la consola C# si es posible. Si no, pues con Windows Form.
Ya no recuerdo casi nada de Python y quiero tenerlo en C#.

El código del Pyhon es este.
Código
  1. import os, sys, tkFileDialog,Tkinter
  2.  
  3. root = Tkinter.Tk()
  4. root.withdraw()
  5.  
  6. formats = [ ('Roms Super Nintendo SMC','.smc'),('Roms Super Nintendo SFC','.sfc'),('Fichier Bin','.bin'),('Roms Super Nintendo','.smc .sfc .bin') ]
  7.  
  8. input = tkFileDialog.askopenfile(parent=root,mode='rb',filetypes=formats,
  9.                                 title='Seleccione el archivo para intercambiar bin HI a LO como A16->A15, A17->A16...A21->A20 y A15->21')
  10. if not input:
  11.    print "Error: no se puede abrir el archivo."
  12.    sys.exit()
  13.  
  14. output = tkFileDialog.asksaveasfile(parent=root,mode='wb',filetypes=formats,title='Crear nombre de archivo de salida.')
  15. if not output:
  16.    print "Error: no se puede crear el archivo de salida."
  17.    sys.exit()
  18.  
  19.  
  20.    # reading input file to a byte array
  21.    data = bytearray(input.read())
  22.  
  23.    # calculating rom size in 2 exponants
  24.    expsize = 0
  25.    bytesize = len(data)
  26.    while bytesize > 1:
  27.            expsize += 1
  28.            bytesize = bytesize // 2
  29.  
  30.    # init a proper size empty bytearray
  31.    buffer = bytearray()
  32.    for i in range(2**expsize): buffer.append(0)
  33.  
  34.    # let's do the swap
  35.    count = 0
  36.    for i in range(len(data)):
  37.            addr = (i & 0x7fff) + ((i & 0x008000) << (expsize - 16)) + ((i & 0x010000) >> 1) + ((i & 0x020000) >> 1) + ((i & 0x040000) >> 1)
  38.            + ((i & 0x080000) >> 1) + ((i & 0x100000) >> 1) + ((i & 0x200000) >> 1)
  39.            if addr != i: count += 1
  40.            buffer[addr] = data[i]
  41.    print "Intercambiadas %s (%s) direcciones" % (count, hex(count))
  42.  
  43.    # writing output file
  44.    output.write(buffer)
  45.  
  46.    # close file handles
  47.    input.close()
  48.    output.close()

Es cierto que con Visual Studio Community 2019 me ejecuta bien el Python, pero dependo de compilador y con C# no.

Esto parece una tarea muy complicada.

Muchas gracias.
295  Programación / Programación C/C++ / Re: Leer dll en consola win32 en: 3 Julio 2020, 23:29 pm
Buenas:

Gracias por el consejo. Estoy ahora mismo haciendo la versión con dll. En cuanto lo tenga, lo muestro.

Les dejo un enlace del programa pero esta vez en la introducción de datos y cuando muestra los datos, se escucha una voz. El enlace es por Dropbox.



Enlace

Lo prueban y comentan si les funcionan, a parte de contar sus impresiones.
296  Programación / Programación C/C++ / Re: Leer dll en consola win32 en: 3 Julio 2020, 16:20 pm
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.
297  Programación / Programación C/C++ / Re: Leer dll en consola win32 en: 3 Julio 2020, 15:48 pm
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.

298  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 am
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.
299  Programación / Programación C/C++ / Re: Leer dll en consola win32 en: 2 Julio 2020, 01:10 am
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.
300  Programación / Scripting / Re: Probando este código en: 2 Julio 2020, 01:09 am
Ya funciona gracias a todos.
Páginas: 1 ... 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [30] 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 ... 254
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines