|
Mostrar Temas
|
Páginas: 1 2 [3]
|
21
|
Programación / Programación C/C++ / Ejecutar un bat... Al inicio de Windows
|
en: 26 Marzo 2013, 19:30 pm
|
Buenas, necesito hacer algo un poco engorroso.
Quiero que un exe "cambie" el registro para que al iniciar Windows se ejecute un determinado bat.
El bat en cuestión se encuentra en la misma carpeta del exe y tiene un nombre conocido (Bateria.bat).
|
|
|
22
|
Programación / Programación C/C++ / Instalando SFML en Codeblocks (SOS)
|
en: 22 Marzo 2013, 17:40 pm
|
Me estoy volviendo loco para instalar esta librería en CodeBlocks (Windows): - Primero me descargo el full SDK de aquí: http://www.sfml-dev.org/download.php- Copia las carpetas lib y include a la carpeta de Mingw - Creo un proyecto en blanco, voy a build options y pongo: - Introduzco la macro SFML_STATIC tal como sale en el tutorial: Añado un archivo al proyecto y pongo un código de ejemplo: #include <SFML/Window.hpp> int main() { sf::Window window(sf::VideoMode(800, 600), "My window"); // run the program as long as the window is open while (window.isOpen()) { // check all the window's events that were triggered since the last iteration of the loop sf::Event event; while (window.pollEvent(event)) { // "close requested" event: we close the window if (event.type == sf::Event::Closed) window.close(); } } return 0; }
Clico en compilar, errores: c:\mingw\bin\..\lib\gcc\mingw32\4.7.2\..\..\..\libsfml-window-s.a(VideoMode.cpp.obj):VideoMode.cpp|| undefined reference to `__gxx_personality_sj0'| c:\mingw\bin\..\lib\gcc\mingw32\4.7.2\..\..\..\libsfml-window-s.a(VideoMode.cpp.obj):VideoMode.cpp|| undefined reference to `_Unwind_SjLj_Register'| c:\mingw\bin\..\lib\gcc\mingw32\4.7.2\..\..\..\libsfml-window-s.a(VideoMode.cpp.obj):VideoMode.cpp|| undefined reference to `_Unwind_SjLj_Unregister'| c:\mingw\bin\..\lib\gcc\mingw32\4.7.2\..\..\..\libsfml-window-s.a(VideoMode.cpp.obj):VideoMode.cpp|| undefined reference to `_Unwind_SjLj_Resume'| ||=== Build finished: 4 errors, 0 warnings (0 minutes, 0 seconds) ===|
Pruebo ahora a enlazar con las librerías dinámicas, elimino la macro STATIC y compilo. Ahora compila correctamente, copio las DLL a la carpeta y ejecuto el programa. Me da error: Me estoy volviendo loco, LOCO
|
|
|
24
|
Programación / Programación C/C++ / ¿Por que no deberías usar el Devcpp?
|
en: 10 Marzo 2013, 13:45 pm
|
Me he dado cuenta que mucha gente aún sigue usando el obsoleto Devcpp... Mi consejo esque os cambieis de IDE ya que: - Lleva sin actualizarse desde el 2004. - Su editor es muy simple, sus tabulaciones son horrorosas. - No tiene plugins. - No soporta varios compiladores, es más, el compilador que viene por defecto está muy obsoleto. - La depuración no funciona, no dispone de apenas opciones de compilación... - No es multiplataforma, solo está para Windows. La única razón por la que alguien puede seguir con Devcpp es porque está acostumbrado a él. Pero no hay ninguna razón lógica para seguir con él (ni es más sencillo, ni es más potente, ni es más eficaz...). Hay muchos otros IDE que harían mucho mejor su trabajo (Geany, CodeBlocks, Visual Studio...). Personalmente a mi me gusta CodeBlocks: http://www.codeblocks.org/downloads/26Os descargaís la versión que incluye mingw (el compilador). Lo instalais y creaís un nuevo proyecto. Terminado Por favor, dejad de usar IDE tan desfasados (como digo este digo Turboland).
|
|
|
25
|
Programación / Programación C/C++ / Calcular determinante de una matriz NxN
|
en: 12 Febrero 2013, 21:39 pm
|
Os dejo aquí un programa que me creé para calcular determinantes de matrices NxN. Personalmente no me gustan los algoritmos recursivos, pero funcionan de maravilla en este caso #include <cstdlib> #include <iostream> using namespace std; void MostrarMatriz(int** Matriz,unsigned int MAX); void Leer_matriz(int** a,unsigned int MAX); int CalcularDeterminante(int** Matriz,unsigned int MAX); int main(int argc, char *argv[]) { int Tamanyo; while(1) { cout<<"Indica el tamanyo de la matriz: "; cin>>Tamanyo; if (Tamanyo < 2) Tamanyo = 2; cout<<endl<<"Inserta los elementos de la matriz: "<<endl<<endl; int** Matriz; Matriz = new int*[Tamanyo]; for (int i = 0; i<Tamanyo; i++) Matriz[i] = new int[Tamanyo]; Leer_matriz(Matriz,Tamanyo); cout<<endl<<endl<<endl; MostrarMatriz(Matriz,Tamanyo); cout<<endl<<endl<<endl; cout<<"El determinante es: "<<CalcularDeterminante(Matriz,Tamanyo); cout<<endl<<endl<<endl; system("PAUSE"); system("PAUSE"); system("CLS"); } return EXIT_SUCCESS; } int CalcularDeterminante(int** Matriz,unsigned int MAX) { if (MAX == 2) { return (Matriz[0][0]*Matriz[1][1] - Matriz[0][1]*Matriz[1][0]); } else { int Actual = 0; int k = 0; int Numero = 0; short Multriplicador; int** Buffer; // Creo una nueva matriz para hacer los adjuntos Buffer = new int*[MAX-1]; for (int i = 0; i<(MAX-1); i++) Buffer[i] = new int[MAX-1]; for (int l = 0; l < MAX; l++) // Desarrollo por filas { for (int j = 1; j < MAX; j++) // Creo una nueva matriz adjunta { for (int i = 0; i < MAX; i++) { if (i != l) { Buffer[k][j-1] = Matriz[i][j]; k++; } } k = 0; } if ( l % 2 != 0) Multriplicador = -1; else Multriplicador = 1; Numero += (Matriz[l][0]*CalcularDeterminante(Buffer,MAX-1)*Multriplicador); } return Numero; } } void MostrarMatriz(int** Matriz,unsigned int MAX) { for (int j = 0; j < MAX; j++) { cout<<endl<<" ( "; for (int i = 0; i < MAX; i++) cout<<Matriz[i][j]<<" "; cout<<") "; } } void Leer_matriz(int** a,unsigned int MAX) { int i,j; for (j = 0; j < MAX; j++) for (i = 0; i < MAX; i++) { cout<<"Introduce el numero para la posicion ("<<i<<","<<j<<") "<<endl; cin>>a[i][j]; } }
Consejos, mejoras
|
|
|
26
|
Programación / Programación C/C++ / Windows API: Crear Menú
|
en: 30 Enero 2013, 18:34 pm
|
Iniciandome en el tema de Windows API, intento crear un menú sencillo pero no me lo coje!: Menu.rc #include "Constantes de menu.hpp" Menu MENU BEGIN POPUP "&Archivo" BEGIN MENUITEM "&Abrir", M_ABRIR MENUITEM "&Guardar", M_GUARDAR MENUITEM SEPARATOR MENUITEM "&Salir", M_SALIR END POPUP "Ediccion" BEGIN MENUITEM "&Deshacer",M_DESHACER END END
Main.cpp #include <windows.h> #include "Assets\Constantes de menu.hpp" #include "Assets\Menu.rc" /* Declare Windows procedure */ LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); /* Make the class name into a global variable */ char szClassName[ ] = "CodeBlocksWindowsApp"; int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow) { HWND hwnd; /* This is the handle for our window */ MSG messages; /* Here messages to the application are saved */ WNDCLASSEX wincl; /* Data structure for the windowclass */ /* The Window structure */ wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */ wincl.style = CS_DBLCLKS; /* Catch double-clicks */ wincl.cbSize = sizeof (WNDCLASSEX); /* Use default icon and mouse-pointer */ wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; /* No menu */ wincl.cbClsExtra = 0; /* No extra bytes after the window class */ wincl.cbWndExtra = 0; /* structure or the window instance */ /* Use Windows's default colour as the background of the window */ wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND; /* Register the window class, and if it fails quit the program */ if (!RegisterClassEx (&wincl)) return 0; /* The class is registered, let's create the program*/ hwnd = CreateWindowEx ( 0, /* Extended possibilites for variation */ szClassName, /* Classname */ "Code::Blocks Template Windows App", /* Title Text */ WS_OVERLAPPEDWINDOW, /* default window */ CW_USEDEFAULT, /* Windows decides the position */ CW_USEDEFAULT, /* where the window ends up on the screen */ 544, /* The programs width */ 375, /* and height in pixels */ HWND_DESKTOP, /* The window is a child-window to desktop */ LoadMenu(hThisInstance,"Menu"), /* No menu */ hThisInstance, /* Program Instance handler */ NULL /* No Window Creation data */ ); /* Make the window visible on the screen */ ShowWindow (hwnd, nCmdShow); /* Run the message loop. It will run until GetMessage() returns 0 */ while (GetMessage (&messages, NULL, 0, 0)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); } /* The program return-value is 0 - The value that PostQuitMessage() gave */ return messages.wParam; } /* This function is called by the Windows function DispatchMessage() */ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) /* handle the messages */ { case WM_DESTROY: PostQuitMessage (0); /* send a WM_QUIT to the message queue */ break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0; }
Constantes de Menu.hpp #define M_ABRIR 100 #define M_GUARDAR 101 #define M_SALIR 102 #define M_DESHACER 103
Me da error de sintaxis en Menu.rc, y yo no veo ninguno *_*
|
|
|
27
|
Programación / Programación C/C++ / Funcion tellg in Windows API?
|
en: 28 Enero 2013, 17:10 pm
|
De las funciones que tiene Windows para el trato con ficheros. Hay alguna que se parezca al tellg de la biblioteca estandar? (es decir una función que te diga en que posición del archivo te encuentras).
|
|
|
29
|
Programación / Programación C/C++ / Problema con las excepciones
|
en: 27 Enero 2013, 12:24 pm
|
Vereis tengo una clase tal que asi: using namespace std; class Rar_File_Mising { private: ifstream Lectura; ofstream Escritura; // Demas metodos y variables... public: // Constructor Rar_File_Mising(const char* Nombre,bool Opcion); //Metodos string ListarArchivos(); void Generar(const char* Nombre,vector<unsigned int> Numero); //... // Excepciones... struct Excepcion { unsigned int N_Error; // Codigo de error string Mensaje; // Mensaje de error Excepcion(string mensaje,unsigned int Error) : Mensaje(Mensaje),N_Error(Error) {}; // Constructor }; // Destructor ~Rar_File_Mising(); };
Como veis, he definido una estructura para definir las excepciones que me puedan ocurrir. De forma que si ocurre algo inesperado: if (!Lectura.is_open()) throw Excepcion("No hay ningun fichero abierto",ARCHIVO_NO_ABIERTO);
El problema esque no me las coge nunca en el bloque catch (ni siquiera en el bloque ...): try { Rar_File_Mising Nuevo(Nombre.c_str(),Opcion); cout<<Nuevo.ListarArchivos(); } catch(Rar_File_Mising::Excepcion &E) { cout<<E.Mensaje<<endl; } catch(...) { cout<<"???"; }
¿Que es lo que puede pasar? Me acabo de cambiar al codeblocks hace poco, tengo que activar algo para que me admita las excepciones?
|
|
|
30
|
Programación / Programación C/C++ / Error al comparar cadenas
|
en: 26 Enero 2013, 11:19 am
|
Necesito comprobar si un determinado archivo es un rar, lo que hago es comprobar si tiene la firma que tiene todo archivo Rar: "Rar!" bool Rar_File_Mising::ComprobarFormato() { if (!Lectura.is_open()) throw Excepcion("No hay ningun fichero abierto",ARCHIVO_NO_ABIERTO); char* Leer = new char[4]; Lectura.read(Leer,4); // cout<<"Cosa:"<<Leer[0]<<Leer[1]<<Leer[2]<<Leer[3]; if (strcmp(Leer,"Rar!") == 0) { delete[] Leer; return true; } else { delete[] Leer; return false; } }
El problema esque cuando abro un archivo real. Siempre me lo detecta como falso, es como si no quisiera leer >_>
|
|
|
|
|
|
|