Resultados 1 al 6 de 6

SDKs C++ y Windows

  1. #1 SDKs C++ y Windows 
    Iniciado
    Fecha de ingreso
    Apr 2008
    Mensajes
    4
    Descargas
    7
    Uploads
    0
    Hola, soy David, nuevo en este foro...Mi primer post es una pregunta para los que saben de C++ y windows....

    Venia programando con C# muy comodo, facil y rapido , pero un biuen dia me di cuenta que para que mis programas (de naturaleza misteriosa ) funcionaran en distintas maquinas windows (98 incluso) no debian depender del framework .NET asi que me decidi ponerme a aprender C++ (lo que necesito es binario no?)

    Y he aqui mis problemas.... Las librerias de C# y el VS.NET son magnificos hasta tal punto que posiblemente este muy mal acostumbrado a que el Visual Studio me haga todo el trabajo sucio y yo limitarme a codificar de lo mas tranquilo sabiendo que si de ultima cometia algun error el compilador me diria "en la linea x hay un error x" y asi facilmente repararlo. Pero ahora liandome con C++ esa comodidad se fue al tacho, empece obviamente haciendo pruebas varias con las librerias estandar y todo sale de lo mas bien, todo limpio y sin problemas.... PERO a la hora de usar los apis de windows empiezan los errores, las fallas y los dolores de cabeza...

    Estuve averiguando en internet por un tal MFC (Microsoft Foundation Class) pero creo que es solo para hacer ventanitas ridiculas y guis en ves de darme lo que necesito (lectura y control del registro, lectura y control de procesos (Todo muy facil con .NET y C#)) asi llegue a algo misterioso llamado "MS Windows SDK", me imagino que esto es lo que necesito? si es asi... donde lo encuentro? Intente en la pagina de microsoft pero los archivos que bajo estan siempre corruptos

    Por donde deberia continuar en mis estudios sobre C++? la sintaxis ya mas o menos la tengo clara, las tecnicas que se usan en dicho lenguaje mas o menos tambien lo quenecesitaria es empezar a programar PARA WINDOWS, lo que me interesa pasa mas que nada por eso de control de procesos y del registro...via C++ pero sin depender de .NET

    Bueno esperando una ayudita de los que saben, GRAX

    Esto es un edit...Creo que me equivoque de subForo para esta pregunta, si algun admin quiere reubicarlo
    Última edición por d0cT0R Ch40S; 25-04-2008 a las 20:02
    Citar  
     

  2. #2  
    Iniciado
    Fecha de ingreso
    Apr 2008
    Mensajes
    4
    Descargas
    7
    Uploads
    0
    Bueno, probe con el Visual C++ 6 y ya encontre la manera de hacerlo (parece que se instala con el SDK y MFC automaticamente) y puedo usar las funciones predeclaradas en "windows.h" (http://msdn2.microsoft.com/en-us/library/ms685942(VS.85).aspx)

    Ahora me sentare a desarrollar mis malevol... digo..., mis inofensivas clases... xD

    De todas formas mataria saber como se hace para programar para Windows desde una IDE como Dev-C++ (Que es la que estaba usando) =S. Intente usar "windows.h" pero me daba un error tras otro..

    Ya volveran a tener preguntas mias xD

    Grax!
    Citar  
     

  3. #3  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    Buenas! Usar las funciones de la API WIN32 no depende del entorno en cuestion. Puedes usar el lenguaje y el entorno que quieras, lo único que variará es la forma de declarar dichas funciones.

    La ventaja de usar <windows.h> es que ya tienes definidas las cabeceras y te olvidas de tener que redeclararlas en tu código principal. El inconeniente es que si sólo vas a usar un par de funciones no merece la pena, ya que por el simple hecho de hacer un #include te mete todo el código aunque no lo uses.

    Entonces, las cosas que debes saber, si quieres evitar complicaciones (bajo mi punto de vista es más sencillo como lo voy a explicar a continuación), son:

    1º Conocer el nombre de la funcion que quieres utilizar, es decir el nombre con el que fue exportado de la DLL.
    2º Conocer la DLL a la que pertenece.
    3º Conocer los parámetros que recibe, y su orden exacto
    4º Establecer un estandar de llamada típico de la arquitectura x86 (por ejemplo stdcall, cdecl, syscall, fastcall, etc...)

    Así por ejemplo en C# una declaración sería:

    [DLLimport ("libreria.dll")] //por ejemplo user32.dll, kernel32.dll, advapi.dll, etc...

    public static extern funcion (tipo_parametro1 param1,...,tipo_parametroN paramN);

    //y luego en el main...

    static void main (void){
    funcion(p1,...pN); //la llamas como una funcion normalmente
    }

    Lo que quiero decir, aunque he puesto el ejemplo en C# por venir al caso, esto se puede hacer en cualquier lenguaje y en cualquier entorno, por ejemplo en Visual Basic, java, delphi, C, etc...

    Por defecto el estandar utilizado en las llamadas a la API WIN32 suele ser el stdcall, es decir, lo parámetros son pasados por pila de derecha a izquierda (el de más a la izquierda está en la cima de la pila), y tras retornar de la función, es el main (o la funcion que llama a la de la API), la que restaura la pila a su estado anterior a la llamada. (por ejemplo con un MOV ESP, EBP; POP EBP). A diferencia del cdecl que es la propia funcion llamada (la de la API) la que restaura la pila.

    En cuanto a:
    [...]mataria saber como se hace para programar para Windows desde una IDE como Dev-C++[...]
    No sé muy bien a qué te refieres con "programar para Windows"... Una cosa es el código del programa (algoritmos), y otra es el compilador que se utiliza para el sistema en que se va a ejecutar. Es decir, tu programas, y luego ya se verá que compilador utilizar.

    La cuestión es saber si tu código es portable a otras plataformas, ya que si utilizas funciones nativas del sistema, entonces ya empiezan las limitaciones. Sería necesario por ejemplo utilizar máquinas virtuales o emuladores para el sistema en cuestión.

    Un saludo.
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

  4. #4  
    Iniciado
    Fecha de ingreso
    Apr 2008
    Mensajes
    4
    Descargas
    7
    Uploads
    0
    Hola, gracias por responder, y por tu consejo!

    Te cuento (y trato de explicarme de paso)... Por ejemplo en el Visual Studio podia utilizar las librerias de clases predefinidas de C# que estan en los namespaces (en el caso de manejar los procesos y el registro) System.Diagnostics y Microsoft.Win32, en realidad jamas me acerque a ninguna DLL. xD

    Me imagino que las clases que estan definidas en esos namespaces ya tienen declaradas las DLL a las que se refieren los metodos (funciones) asi yo podia usar por ejemplo:

    ServiceController[] servicios = ServiceController.GetServices()

    Para tener un array con handlers para todos los servicios corriendo en mi PC. Todo muy facil, lindo y comodo...El mismo compilador (creo, hasta lo que se) solo "compila" los metodos que se usaron, ni mas ni menos...


    Con C++....me perdi...mal xD

    Por ejemplo...Quiero usar la funcion: ChangeServiceConfig2 de la libreria Advapi32.dll.

    Esta funcion se define segun la documentacion de msdn:

    BOOL WINAPI ChangeServiceConfig2(
    __in SC_HANDLE hService,
    __in DWORD dwInfoLevel,
    __in_opt LPVOID lpInfo
    );

    Donde hService es un handler recibido de la funcion OpenService, entedible....
    Todo esto utilizando "windows.h"...
    Pero me intereso el tema de no usarlo y declara por mi cuenta las funciones que quiero utilizar...

    Me imagino que debo usar:

    #using <Advapi32.dll>

    (?)

    pero ahora como hago para declarar esa funcion?

    Podrias ilustrarme con un ejemplito? xD

    Grax! De todas formas seguire investigando el asunto...(que este mensaje es parte de la investigacion!)

    Con eso de programar con Dev-C++ para win me referia a utilizar las librerias y tipos especificos de windows, por que haciendo un par de pruebas y probando un par de ejemplos que baje de la net incluyendo "windows.h" no me salia nada y con Visual C++, si.

    PD: Me pongo a investigar lo del estandar de llamada. = )
    Última edición por d0cT0R Ch40S; 26-04-2008 a las 04:13
    Citar  
     

  5. #5  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    Buenas de nuevo! Si quieres puedes echar un vistazo a las e-zines de aquí en HackHispano. En concreto lee los artículos "Introducción a la API de Windows" (de momento sólo hay dos publicaciones de la revista, aunque en breve saldrá el tercero). Allí explico algunos conceptos y ejemplos en distintos lenguajes.

    Un saludo
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

  6. #6  
    Iniciado
    Fecha de ingreso
    Apr 2008
    Mensajes
    4
    Descargas
    7
    Uploads
    0
    Hola, Gracias por responder... Estuve haciendo algunos progresos, en realidad ya cumpli mi primera meta, hice un programa que cambia las configuraciones de un servicio ("por ejemplo" el antivirus xD) utilizando las funciones "OpenSCManager,OpenService,QueryServiceConfig2 y DeleteService"pero incluyendo "windows.h"... De todas formas quede muy intrigado con la manera de hacerlo sin las cabeceras de windows...(Me imagino que el programa quedaria mucho mas chico...)

    Si bien estuve investigando no encontre la manera de declarar esas funciones...(La primera ves que google me falla) ahora lo que tengo pensado hacer es mandarme a revisar las cabeceras de windows... si estan ahi declaradas entonces solo sera copiar y pegar... xD, Mentira, quede intrigado posta...

    Cualquier avance... volvere a postear, nunca se sabe cuando una persona va a tener mis mismas preguntas (entre las cosas que encontre googleando fue mi propio mensaje xD)

    Hasta pronto!

    Baje y estoy leyendo tus articulos, grax.
    Última edición por d0cT0R Ch40S; 27-04-2008 a las 07:57
    Citar  
     

Temas similares

  1. Respuestas: 5
    Último mensaje: 27-07-2014, 23:42
  2. Windows 8 Tour y Windows Camp. Sevilla 22 y 23 de marzo‏
    Por clarinetista en el foro FORMACION
    Respuestas: 0
    Último mensaje: 19-03-2012, 09:31
  3. Respuestas: 5
    Último mensaje: 08-11-2011, 23:20
  4. Respuestas: 5
    Último mensaje: 31-01-2008, 23:44
  5. Respuestas: 0
    Último mensaje: 22-03-2002, 20:55

Marcadores

Marcadores