我正在開發一個項目,我需要創建一個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