win32 visual studio programa hacer con como application c++ c winapi visual-c++

c++ - visual - C biblioteca vs WinApi



win32 application visual studio 2017 (8)

¿Llamarán las funciones C a las funciones winapi o es al revés?

Las funciones C (que se implementan en una biblioteca de modo de usuario) llaman a las funciones WINAPI (que se implementan en el kernel O / S).

Muchas de las funciones estándar de la biblioteca c (fwrite, memset, malloc) tienen equivalentes directos en la API de Windows (WriteFile, FillMemory / ZeroMemory, GlobalAlloc).

Además de los problemas de portabilidad, ¿qué se debe usar, las funciones CLIB o API de Windows?

¿Llamarán las funciones C a las funciones winapi o es al revés?

gracias por la ayuda


Algunos puntos adicionales en algunos ejemplos:

FillMemory, ZeroMemory

Ni estas ni las funciones C son llamadas al sistema, por lo tanto, una podría implementarse una encima de la otra, o incluso podrían tener implementaciones diferentes, provenientes de una fuente común o no.

GlobalAlloc

Dado que malloc () se construye sobre las primitivas del sistema operativo expuestas por su API, sería interesante saber si malloc () y el uso directo de tales asignadores coexisten felizmente sin problemas. Podría imaginar algunas razones por las cuales malloc podría suponer silenciosamente que el montón al que accede es contiguo, incluso si lo llamaría un error de diseño, incluso si estuviera documentado, a menos que el costo adicional por la seguridad no fuera insignificante.


Las funciones C llamarán a la API del sistema, la biblioteca Standard Runtime C (o CRT) es una API utilizada para estandarizar entre los sistemas.

Internamente, cada sistema diseña su propia API directamente usando llamadas al sistema o controladores. Si tiene una versión comercial de Visual C ++, solía proporcionar el código fuente de CRT, esta es una lectura interesante.


Las funciones no son realmente equivalentes, con la excepción de algunas cosas simples como ZeroMemory.

GlobalAlloc, por ejemplo, le proporciona memoria, pero también se utilizó para la transferencia de memoria compartida en win16. Partes de esta funcionalidad todavía existen.

WriteFile no solo escribirá en los archivos sino también (entre otros) conductos con nombre. Algo que escribir o escribir no puede hacer directamente.

Diría que use las funciones de la biblioteca c si es posible y use las funciones de Windows solo si necesita la funcionalidad adicional o si obtiene una mejora en el rendimiento.

Esto facilitará la transferencia a otras plataformas más adelante.


No hay nada mágico en la biblioteca C. Es solo una API estandarizada para acceder a servicios comunes desde el sistema operativo. Eso significa que está implementado sobre el sistema operativo, utilizando las API proporcionadas por el sistema operativo.

Use lo que tenga sentido en su situación. La biblioteca C es portátil, Win32 no lo es. Por otro lado, Win32 suele ser más flexible y expone más funciones.


Probablemente sea más información de la que está buscando (y tal vez no sea exactamente lo que pidió), pero Catch22.net tiene un artículo titulado " Técnicas para reducir el tamaño de los ejecutables " que puede ayudar a señalar las diferencias entre las llamadas api de Win32 y las llamadas en tiempo de ejecución.


Si vas a portar tu aplicación en varias plataformas, diría que debes crear tu propio conjunto de envoltorios, incluso si usas las funciones C estándar. Eso le dará la mejor flexibilidad cuando cambie de plataforma, ya que su código estará aislado del sistema subyacente de una manera más agradable.

Por supuesto, eso significa que si solo va a programar para plataformas Windows, simplemente use las funciones de Windows y no use las funciones estándar de la biblioteca C del mismo tipo.

Al final solo necesitas mantenerte consistente con tu elección y estarás bien.


Bueno, actualmente estoy tratando de evitar incluir fstream, sstream, iostream y muchos archivos de biblioteca estándar C y usar winAPI porque la inclusión de cualquiera de estas bibliotecas aumenta el tamaño del ejecutable de salida de aproximadamente 10 KB a aproximadamente 500 KB. Pero a veces es mejor usar la biblioteca estándar C para hacer que su código sea multiplataforma. Entonces creo que depende de tu objetivo.