Je travaille sur un projet et j'ai besoin de créer une API. J'utilise des sockets pour communiquer entre le serveur (mon application) et les clients (les autres applications utilisant mon API).Comment masquer les fonctions d'assistance de l'API publique dans c
Ce projet est en C++ C ne
Je viens d'un fond de linux et ceci est mon premier projet à l'aide de Windows, Visual Studio 2008, et les bibliothèques dll.
J'ai une communication qui fonctionne entre le client et le serveur, mais j'en ai une qui est dupliquée sur les deux projets. Je voudrais créer une bibliothèque (probablement un fichier dll), que les deux projets peuvent lier afin que je ne dois pas maintenir le code supplémentaire.
Je dois aussi créer la bibliothèque qui a l'API que je dois mettre à la disposition de mes clients. Dans les fonctions de l'API que je veux public sont les appels à ces fonctions auxiliaires qui sont du "code dupliqué", je ne veux pas exposer ces fonctions à mon client, mais je veux que mon serveur puisse utiliser ces fonctions. Comment puis-je faire ceci?
Je vais essayer de clarifier avec un exemple. C'est ce que j'ai commencé avec.
Project Server:
int Server_GetPacket(SOCKET sd);
int ReceiveAll(SOCKET sd, char *buf, int len);
int VerifyLen(char *buf);
Projet Client:
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);
C'est un peu ce que je voudrais terminer par:
//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);
Merci toute aide serait appréciée .
Je suis plus préoccupé par la fourniture d'une API propre qui ne contient que les fonctions publiques. Je veux juste éviter que toutes les fonctions d'aide fassent partie de l'API. Voulez-vous dire que je crée une bibliothèque statique pour les fonctions "privées" et que je mets les fonctions "public API" dans une DLL? – emge
@emge: C'est une possibilité. Cela dépend de votre architecture de développement si cela a du sens. Une solution "plus simple" consisterait simplement à inclure les fichiers source dans votre projet et à les construire directement dans le binaire. Ensuite, créez la DLL API publique en tant que projet distinct avec les fonctions exportées souhaitées. –
Merci, j'aime la solution "plus simple", mais comment contourner le problème d'avoir du code dupliqué si j'inclue juste le fichier source dans mon projet et que la DLL API doit utiliser certaines de ces mêmes fonctions? – emge