Estoy trabajando en un proyecto y necesito crear una API. Estoy usando sockets para comunicarme entre el servidor (mi aplicación) y los clientes (las otras aplicaciones que usan mi API).Cómo ocultar las funciones auxiliares de la API pública en c
Este proyecto se encuentra en C no C++
Vengo de un fondo Linux y este es mi primer proyecto el uso de Windows, Visual Studio 2008 y librerías DLL.
Tengo comunicación trabajando entre el cliente y el servidor, pero tengo algunas que están duplicadas en ambos proyectos. Me gustaría crear una biblioteca (probablemente un archivo dll) a la que ambos proyectos puedan enlazar, de modo que no tenga que mantener un código adicional.
También tengo que crear la biblioteca que tiene la API que necesito para poner a disposición de mis clientes. Dentro de las funciones de API que quiero que sean públicas están las llamadas a estas funciones auxiliares que son "código duplicado", no quiero exponer estas funciones a mi cliente, pero sí quiero que mi servidor pueda usar esas funciones. ¿Cómo puedo hacer esto?
Trataré de aclarar con un ejemplo. Esto es con lo que comencé.
de Project Server:
int Server_GetPacket(SOCKET sd);
int ReceiveAll(SOCKET sd, char *buf, int len);
int VerifyLen(char *buf);
Proyecto Cliente:
int Client_SendCommand(int command);
int Client_GetData(int command, char *buf, int len);
int ReceiveAll(SOCKET sd, char *buf, int len);
int VerifyLen(char *buf);
Esto es un poco de lo que me gustaría terminar con:
//Server Project:
int Server_GetPacket(SOCKET sd);
// library with public and private types
// private API (not exposed to my client)
int ReceiveAll(SOCKET sd, char *buf, int len);
int VerifyLen(char *buf);
// public API (header file available for client)
int Client_SendCommand(int command);
int Client_GetData(int command, char *buf, int len);
Gracias cualquier ayuda se agradece .
Me preocupa más proporcionar una API limpia que solo contenga las funciones públicas. Solo quiero evitar que todas las funciones auxiliares sean parte de la API. ¿Está diciendo que creo una biblioteca estática para las funciones "privadas" y luego pongo las funciones de "API pública" en una DLL? – emge
@emge: Esa es una posibilidad. Depende de tu arquitectura de desarrollo un poco si tiene sentido. Una solución "más simple" sería simplemente incluir los archivos fuente en su proyecto y compilarlos directamente en el binario. A continuación, cree la DLL API pública como un proyecto separado con las funciones exportadas deseadas. –
Gracias, me gusta la solución "más simple", pero ¿cómo puedo solucionar el problema de tener código duplicado si solo incluyo el archivo fuente en mi proyecto y la API DLL necesita usar algunas de esas mismas funciones? – emge