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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Temas
Páginas: 1 2 [3] 4 5
21  Programación / Programación C/C++ / (Ayuda) La función wglMakeCurrent(NULL, NULL) crashea el programa a veces en: 10 Junio 2015, 02:08 am
Hola a tod@s. El problema proviene de función de la API de Windows en colaboración con OpenGL. La función es wglMakeCurrent(NULL, NULL). El problema es que que a veces (aleatoriamente) el programa crashea. He buscado por internet, pero nadie ha dado una respuesta que me sirva.

Esta función la utilizo cuando voy a cerrar el programa. Aquí está la función llamada al cerrarse el programa:

Código
  1. void Game::destroy() {
  2. wglMakeCurrent(NULL, NULL);
  3. wglDeleteContext(*hRC);
  4. ReleaseDC(*hWnd, *hDC);
  5.  
  6. delete[] cWindow;
  7. delete[] hWnd;
  8. delete[] Msg;
  9. delete[] hDC;
  10. delete[] hRC;
  11. }
22  Programación / Programación C/C++ / (Ayuda con OpenGL) La función 'SetPixelFormat' me da un error en: 8 Junio 2015, 05:05 am
Hola, muy buenas a tod@s, os comento:

Estaba creando un simple Hello World de OpenGL usando la API de Windows. He ido paso a paso, creando primero una ventana simple con la API de Windows (la cual se ha creado correctamente), y posteriormente he creado un contexto con el viejo OpenGL. El problema lo da la función SetPixelFormat, el cual da el código de error 3221684230 (en hexadecimal 0xC0070006). No tengo ni idea de que puede pasar, incluso he copiado/pegado un código de un contexto de OpenGL de Internet y me pasa lo mismo...

Código
  1. #ifndef UNICODE
  2. #define UNICODE
  3. #endif
  4.  
  5. #include <windows.h>
  6. #include <gl\gl.h>
  7.  
  8. #include <chrono>
  9. #include <thread>
  10.  
  11. #include <iostream>
  12.  
  13. LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
  14.  
  15. int main() {
  16. WNDCLASSEX cWindow;
  17. HWND hWnd;
  18. MSG Msg;
  19. HDC hDC;
  20. HGLRC hRC;
  21.  
  22. memset(&Msg, NULL, sizeof(MSG));
  23.  
  24. cWindow.cbSize = sizeof(WNDCLASSEX);
  25. cWindow.hInstance = GetModuleHandle(NULL);
  26. cWindow.lpszClassName = L"¡Título!";
  27. cWindow.lpfnWndProc = WndProc;
  28. cWindow.lpszMenuName = NULL;
  29. cWindow.style = CS_OWNDC;
  30. cWindow.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  31. cWindow.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
  32. cWindow.hCursor = LoadCursor(NULL, IDC_ARROW);
  33. cWindow.hbrBackground = (HBRUSH)3;
  34. cWindow.cbClsExtra = 0;
  35. cWindow.cbWndExtra = 0;
  36.  
  37. if(RegisterClassEx(&cWindow) == NULL) {
  38. MessageBox(NULL, L"Error registring a window class!", L"Fatal error", MB_OK | MB_ICONERROR);
  39. PostQuitMessage(0);
  40. }
  41.  
  42. hWnd = CreateWindowEx(0, L"¡Título!", L"¡Título!", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT,
  43.  640, 480, HWND_DESKTOP, NULL, GetModuleHandle(NULL), (void *)NULL);
  44.  
  45. if(hWnd = NULL) {
  46. MessageBox(NULL, L"Error creating a window!", L"Fatal error", MB_OK | MB_ICONERROR);
  47. PostQuitMessage(0);
  48. }
  49.  
  50. ShowWindow(hWnd, SW_SHOWDEFAULT);
  51.  
  52. PIXELFORMATDESCRIPTOR PFD;
  53. int choosenPFD;
  54.  
  55. memset(&PFD, NULL, sizeof(PIXELFORMATDESCRIPTOR));
  56. PFD.nVersion = 1;
  57. PFD.nSize = sizeof(PIXELFORMATDESCRIPTOR);
  58. PFD.iPixelType = PFD_TYPE_RGBA;
  59. PFD.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
  60. PFD.cColorBits = 24;
  61. PFD.cDepthBits = 16;
  62. PFD.iLayerType = PFD_MAIN_PLANE;
  63.  
  64. hDC = GetDC(hWnd);
  65.  
  66. choosenPFD = ChoosePixelFormat(hDC, &PFD);
  67.  
  68. if(!choosenPFD) {
  69. MessageBox(hWnd, L"Error choosing a pixel format (old)!", L"Fatal error", MB_OK | MB_ICONERROR);
  70. PostQuitMessage(0);
  71. }
  72.  
  73. if(!SetPixelFormat(hDC, choosenPFD, &PFD)) {
  74. std::clog << GetLastError();
  75. MessageBox(hWnd, L"Error setting a pixel format (old)!", L"Fatal error", MB_OK | MB_ICONERROR);
  76. PostQuitMessage(0);
  77. }
  78.  
  79. hRC = wglCreateContext(hDC);
  80.  
  81. if(!hRC) {
  82. MessageBox(hWnd, L"Error creating a OpenGL context (old)!", L"Fatal error", MB_OK | MB_ICONERROR);
  83. PostQuitMessage(0);
  84. }
  85.  
  86. if(!wglMakeCurrent(hDC, hRC)) {
  87. MessageBox(hWnd, L"Error linking a OpenGL context with a window!", L"Fatal error", MB_OK | MB_ICONERROR);
  88. PostQuitMessage(0);
  89. }
  90.  
  91. while(Msg.message != WM_QUIT) {
  92. if(PeekMessage(&Msg, hWnd, NULL, NULL, PM_REMOVE)) {
  93. TranslateMessage(&Msg);
  94. DispatchMessage(&Msg);
  95. }
  96.  
  97. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  98.  
  99.  
  100.  
  101. SwapBuffers(hDC);
  102.  
  103. std::this_thread::sleep_for(std::chrono::microseconds(11764));
  104. }
  105.  
  106. wglMakeCurrent(NULL, NULL);
  107. wglDeleteContext(hRC);
  108. ReleaseDC(hWnd, hDC);
  109. DestroyWindow(hWnd);
  110. UnregisterClass(L"¡Título!", GetModuleHandle(NULL));
  111.  
  112. return 0;
  113. }
  114.  
  115. LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
  116. switch(uMsg) {
  117. case WM_DESTROY:
  118. PostQuitMessage(0);
  119. }
  120.  
  121. return DefWindowProc(hWnd, uMsg, wParam, lParam);
  122. }
23  Seguridad Informática / Seguridad / Que comienzos son los recomendados para un principiante en: 31 Mayo 2015, 01:26 am
Hola. Muy buenas a tod@s. Hoy me ha entrado la curiosidad de este mundo de la seguridad informática. Bien, me presento: soy un programador principalmente en lenguaje C++ y Java (principalmente usados en videojuegos). Sé mas o menos como funciona la arquitectura de un ordenador (manejo de memoria, código máquina...). No sé prácticamente nada sobre redes (solo sé lo que es muy básico). La mayor parte de mi experiencia está basada en Windows, es decir, no sé prácticamente nada sobre Linux y servidores

Sabiendo todo esto, por dónde me recomendarían empezar a aprender Seguridad Informática (por hobby :)). Gracias
24  Programación / Programación C/C++ / (Ayuda) Skin para Eclipse CDT estilo Visual Studio 2013 (Oscuro) en: 29 Mayo 2015, 01:45 am
Hola a tod@s. La duda está básicamente expresada en el título. Estoy buscando un tema para el IDE Eclipse CDT (C++) que se parezcca al de Visual Studio 2013 (tema oscuro).

Aquí os dejo de como se ve el tema de Visual Studio:



Nota: es preferible que el tema sea compatible con Color Theme (los que usen Eclipse CDT supongo que sabrán que es), para los que no, es como una amplicación dentro de Eclipse que te permite poner un tema sin complicaciones.

Muchas gracias.
25  Programación / Programación C/C++ / (Ayuda) Programa crashea al analizar una cadena (char *) en: 26 Mayo 2015, 22:49 pm
Hola. Muy buenas a tod@s. El problema que tengo es algo extraño. Primero enseño el código:

Código
  1. void String::replaceData(const char *data) {
  2. _num_characters = 0;
  3.  
  4. while(data[_num_characters] != (char)NULL)
  5. _num_characters += 1;
  6.  
  7. realloc(_value, _num_characters + 1);
  8. _value[_num_characters] = (char)0;
  9.  
  10. while(true) {
  11. --_num_characters;
  12.  
  13. _value[_num_characters] = data[_num_characters];
  14.  
  15. if(_num_characters == NULL)
  16. break;
  17. }
  18. }

Main

Código
  1. #include <iostream>
  2.  
  3. #include "string.h"
  4.  
  5. int main(int argc, char *argv[]) {
  6. String cadena = "Hola";
  7.  
  8. cadena.replaceData("Hola, soy un programador");
  9.  
  10. std::cin.get();
  11. return 0;
  12. }

El problema está en la línea 4, donde el while. Cuando la cadena que le paso por parámetros tiene mas de 16 caracteres, y en el programa presiono enter (el cin.get deja continuar el programa), me sale el siguiente error:
'Debug Assertion Failed, file f:\dd\vctools\crt\crtw32\misc\dbgheap.c, line 1322, expression: _CrtlsValidHeapPointer(pUserData)'

Sé que el error se produce en el while ya que quitandolo, y sustituyendo la variable _num_characters por 17 no me da ese error.

Espero que me puedan ayudar :P Gracias
26  Programación / Programación C/C++ / (Pregunta) Que pasa con la memoria asignada al cerrar el programa en: 26 Mayo 2015, 02:40 am
Hola a todos. Hoy tengo una duda/curiosidad que quería resolver.

La duda es la siguiente: ¿Las variables (arrays, clases...) de desasignan al cerrar el programa? También las variables previamente asignadas con malloc se desasignan al cerrar el programa, o necesitas eliminarlas tu mismo?

Gracias
27  Programación / Programación C/C++ / (Ayuda) Error con un bucle while en un constructor en: 25 Mayo 2015, 17:34 pm
Hola. Muy buenas a todos. Hoy traigo una duda de las que uno piensa que el compilador está fallando porque no tiene otra explicación.

Primero voy a introducir: Estoy intentando imitar la clase string a modo de ejercicio. Pues bien, en el constructor está pasado algo solo descriptible a través de la salida (está debajo del código).

Código
  1. String::String(const char *init_value) {
  2. unsigned int num_characters = 0;
  3.  
  4. while(init_value[num_characters] != (char)NULL)
  5. num_characters += 1;
  6.  
  7. _num_characters = num_characters;
  8. _value = (char *)malloc(num_characters + 1);
  9.  
  10. _value[num_characters] = (char)0;
  11.  
  12. while(--num_characters >= 0) {
  13. printf("%d ", num_characters);  // _value[num_characters] = init_value[num_characters];
  14. }
  15. }

Pues bien, la salida es la siguiente:
3 2 1 0 -1 -2 -3 -4 //... y así hasta el infinito
(El comentario no está en la salida, solo es para aclarar)

Como ven, aunque num_characters valga menos de 0, el while se sigue repitiendo...

Espero que sea error del compilador, porque si no yo sería muy tonto

28  Programación / Programación C/C++ / (Ayuda) Error al cargar BMP en: 17 Mayo 2015, 22:34 pm
Hola, muy buenas a tod@s. Hoy tengo una duda sobre como cargar BMP en la RAM para pasarsela a OpenGL. Bueno, se podría decir que casi lo consigo, pero no!. Mejor vean por ustedes mismos el resultado, y a ver si alguien ve el error...

Código
  1. TEXTURE::TEXTURE(const char *path) {
  2. unsigned char header[54];
  3. unsigned int dataPos;
  4. unsigned int width, height, size;
  5. unsigned char *data;
  6. FILE *filePointer = fopen(path, "rb");
  7.  
  8. if(filePointer == NULL)
  9. printf_s("Error openning image file at '%s'!", path);
  10.  
  11. if(!fread(header, 1, 54, filePointer))
  12. printf_s("Error, file at '%s' isn't a real BMP file.", path);
  13.  
  14. if(header[0] != 'B' || header[1] != 'M')
  15. printf_s("Error, file at '%s' isn't a real BMP file.", path);
  16.  
  17. dataPos = *(int *)&header[0x0A];
  18. size    = *(int *)&header[0x22];
  19. width   = *(int *)&header[0x12];
  20. height  = *(int *)&header[0x16];
  21.  
  22. if(!size)
  23. size = width * height * 3;
  24.  
  25. if(!dataPos)
  26. dataPos = 54;
  27.  
  28. data = new unsigned char[size];
  29. fread(data, 1, size, filePointer);
  30.  
  31. fclose(filePointer);
  32.  
  33. glGenTextures(1, &texID);
  34.  
  35. glBindTexture(GL_TEXTURE_2D, texID);
  36.  
  37. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  38. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  39. glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
  40.  
  41. glBindTexture(GL_TEXTURE_2D, 0);
  42. }

Resultado:


Imagen original:


Código del Vertex Shader:
Código
  1. #version 330 core
  2.  
  3. layout(location = 0) in vec4 position;
  4. layout(location = 1) in vec2 texCoords;
  5.  
  6. out DATA {
  7.    vec2 texCoords;
  8. } vs_out;
  9.  
  10. void main() {
  11.    gl_Position = position;
  12.  
  13.    vs_out.texCoords = texCoords;
  14. }

Código del Fragment Shader:
Código
  1. #version 330 core
  2.  
  3. layout(location = 0) out vec4 color;
  4.  
  5. in DATA {
  6.    vec2 texCoords;
  7. } fs_in;
  8.  
  9. uniform sampler2D sampler;
  10.  
  11. void main() {
  12.    color = texture(sampler, fs_in.texCoords);
  13. }
Espero que me puedan ayudar... ¡Gracias!



O esto es magia, o visual studio me está trolleando. Ahora si que funciona... Sinceramente, no se que pasaba...
29  Programación / Programación C/C++ / (Solucionado) Un programa sencillo usando las librerías GLFW y GLEW crashea en: 14 Mayo 2015, 20:01 pm
Hola. Muy buenas a tod@s. Bueno, ya habiendo solucionado el problema con las dependencias, se me presenta otro problema: al ejecutar un programa compilado de un código sencillo, este crashea.

El código es el siguiente:

Código
  1. #include <iostream>
  2.  
  3. #include <GL/glew.h>
  4. #include <GLFW/glfw3.h>
  5.  
  6. static void errorCallback(int error, const char* description) {
  7. std::cout << description << ". Error core: " << error << std::endl;
  8. }
  9.  
  10. static void keyCallback(GLFWwindow* window, int key, int scancode, int action, int mods) {
  11. if(key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
  12. glfwSetWindowShouldClose(window, GL_TRUE);
  13. }
  14.  
  15. int main() {
  16. GLFWwindow* window;
  17. GLuint VAO;
  18. GLuint VBO;
  19. GLfloat Vertices[] = {
  20. -0.5f, -0.5f, 0.0f,
  21. -0.5f, 0.5f, 0.0f,
  22. 0.5f, 0.5f, 0.0f
  23. };
  24.  
  25. glfwSetErrorCallback(errorCallback);
  26.  
  27. if(!glfwInit())
  28. return -1;
  29.  
  30. window = glfwCreateWindow(640, 640, "Mi juego", NULL, NULL);
  31.  
  32. if(!window) {
  33. glfwTerminate();
  34. return -1;
  35. }
  36.  
  37. glfwMakeContextCurrent(window);
  38. glfwSetKeyCallback(window, keyCallback);
  39.  
  40. glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
  41. glEnable(GL_DEPTH_TEST);
  42.  
  43. glGenVertexArrays(1, &VAO);
  44. glBindVertexArray(VAO);
  45.  
  46. glGenBuffers(1, &VBO);
  47. glBindBuffer(GL_ARRAY_BUFFER, VBO);
  48. glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
  49. glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
  50. glEnableVertexAttribArray(0);
  51.  
  52. while(!glfwWindowShouldClose(window)) {
  53. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  54.  
  55. glBindBuffer(GL_ARRAY_BUFFER, VBO);
  56. glDrawArrays(GL_TRIANGLES, 0, 3);
  57.  
  58. glfwSwapBuffers(window);
  59. glfwPollEvents();
  60. }
  61.  
  62. glfwDestroyWindow(window);
  63. glfwTerminate();
  64.  
  65. return 0;
  66. }

Como ya se ha mencionado, el código puede ser compilado sin problemas, pero al ejecutar el .exe correspondiente, crashea (nótese que se abre la ventana en blanco, y justo en ese momento crashea). ¡Gracias por su atención y ayuda!
30  Programación / Programación C/C++ / (Solucionado) Error en Visual Studio 2013 al enlazar con los binarios de GLFW en: 13 Mayo 2015, 18:20 pm
Hola. Muy buenas a tod@s. Hoy se me presenta un problema bastante frustrante porque no tiene que ver con C++ y no he encontrado la solución en Internet.

El problema es que al compilar un sencillo código sobre GLFW, me da error al enlazar con dicha librería.

Código de error:
Código
  1. 1>main.obj : error LNK2019: símbolo externo _glfwInit sin resolver al que se hace referencia en la función _main
  2. 1>main.obj : error LNK2019: símbolo externo _glfwTerminate sin resolver al que se hace referencia en la función _main
  3. 1>main.obj : error LNK2019: símbolo externo _glfwSetErrorCallback sin resolver al que se hace referencia en la función _main
  4. 1>main.obj : error LNK2019: símbolo externo _glfwCreateWindow sin resolver al que se hace referencia en la función _main
  5. 1>main.obj : error LNK2019: símbolo externo _glfwDestroyWindow sin resolver al que se hace referencia en la función _main
  6. 1>main.obj : error LNK2019: símbolo externo _glfwWindowShouldClose sin resolver al que se hace referencia en la función _main
  7. 1>main.obj : error LNK2019: símbolo externo _glfwSetWindowShouldClose sin resolver al que se hace referencia en la función "void __cdecl key_callback(struct GLFWwindow *,int,int,int,int)" (?key_callback@@YAXPAUGLFWwindow@@HHHH@Z)
  8. 1>main.obj : error LNK2019: símbolo externo _glfwPollEvents sin resolver al que se hace referencia en la función _main
  9. 1>main.obj : error LNK2019: símbolo externo _glfwSetKeyCallback sin resolver al que se hace referencia en la función _main
  10. 1>main.obj : error LNK2019: símbolo externo _glfwMakeContextCurrent sin resolver al que se hace referencia en la función _main
  11. 1>main.obj : error LNK2019: símbolo externo _glfwSwapBuffers sin resolver al que se hace referencia en la función _main
  12. 1>main.obj : error LNK2019: símbolo externo _glfwSwapInterval sin resolver al que se hace referencia en la función _main

Como ven, todos estos errores vienen de que hay problemas al enlazar con las dependecias de GLFW. Bien, los pasos que seguí son los siguientes:

1) Crear proyecto 'aplicación de consola de consola' en VS2013
2) Acceder a las propiedades del proyecto
3) En el apartado general de C++, añadí las carpetas de include donde están los headers de GLFW (C:\Users\Carlos\Desktop\Programacion\Cpp\Prueba\include)
4) En en apartado general de 'vinculador' he añadido las carpetas donde están los binarios .lib de GLFW (C:\Users\Carlos\Desktop\Programacion\Cpp\Prueba\binaries\lib-vc2013)
5) Último paso: en el apartado entrada del vinculador añadí esto:
opengl32.lib
glfw3.lib
glfw3dll.lib
Además de estas, hay agregadas por defecto

Bueno. En último lugar les enseñaré el código por si sirve de algo:

Código
  1. #include <GLFW/glfw3.h>
  2.  
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5.  
  6. static void error_callback(int error, const char* description) {
  7. fputs(description, stderr);
  8. }
  9.  
  10. static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) {
  11. if(key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
  12. glfwSetWindowShouldClose(window, GL_TRUE);
  13. }
  14.  
  15. int main(void) {
  16. GLFWwindow* window;
  17.  
  18. glfwSetErrorCallback(error_callback);
  19.  
  20. if(!glfwInit())
  21. exit(EXIT_FAILURE);
  22.  
  23. window = glfwCreateWindow(640, 480, "Simple example", NULL, NULL);
  24. if(!window) {
  25. glfwTerminate();
  26. exit(EXIT_FAILURE);
  27. }
  28.  
  29. glfwMakeContextCurrent(window);
  30. glfwSwapInterval(1);
  31.  
  32. glfwSetKeyCallback(window, key_callback);
  33.  
  34. while(!glfwWindowShouldClose(window)) {
  35. glClear(GL_COLOR_BUFFER_BIT);
  36.  
  37. glfwSwapBuffers(window);
  38. glfwPollEvents();
  39. }
  40.  
  41. glfwDestroyWindow(window);
  42.  
  43. glfwTerminate();
  44. exit(EXIT_SUCCESS);
  45. }
  46.  

Espero que me puedan ayudar :P ¡Muchas gracias por su atención!
Páginas: 1 2 [3] 4 5
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines