我正在开发一个项目,我需要创建一个API。我使用套接字在服务器(我的应用程序)和客户端(使用我的API的其他应用程序)之间进行通信。如何隐藏帮助函数c中的公共API
该项目是在C不是C++
我来自一个Linux背景,这是使用Windows我的第一个项目时,Visual Studio 2008和DLL库。
我有客户端和服务器之间的通信工作,但我有一些是在这两个项目上重复。我想创建一个库(可能是一个DLL文件),这两个项目都可以链接到,所以我不必维护额外的代码。
我还必须创建具有我需要为我的客户提供的API的库。在我希望公开的API函数中,对这些辅助函数的调用是“重复代码”,我不想将这些函数公开给我的客户端,但我确实希望我的服务器能够使用这些函数。我怎样才能做到这一点?
我会试着用一个例子来说明。这是我开始的。
服务器项目:
int Server_GetPacket(SOCKET sd);
int ReceiveAll(SOCKET sd, char *buf, int len);
int VerifyLen(char *buf);
客户项目:
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);
这是怎么样的,我想用结束了一下:
//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);
感谢任何帮助,将不胜感激。
我更关心提供一个只包含公共函数的干净的API。我只是想避免让所有的帮助函数成为API的一部分。 你是说我为“私人”功能创建一个静态库,然后把“公共API”函数放入DLL中? – emge 2010-06-10 17:01:30
@emge:这是一种可能性。这取决于你的开发架构是否合理。一个“更简单”的解决方案是简单地将源文件包含在项目中,并直接将其构建到二进制文件中。然后使用所需的导出函数将公共API DLL作为单独项目构建。 – 2010-06-10 17:04:45
谢谢,我喜欢“更简单”的解决方案,但是如果我只是将源文件包含在我的项目中,并且API DLL需要使用某些相同的函数,我该如何解决重复代码的问题? – emge 2010-06-10 17:09:39