Как скрыться, помощник функционирует от общедоступного API в c

Я работаю над проектом, и я должен создать API. Я использую сокеты для передачи между сервером (мое приложение) и клиентами (другие приложения с помощью моего 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);

Спасибо любая справка ценилось бы.

5
задан emge 10 June 2010 в 16:48
поделиться

3 ответа

Если вы поместите "частные" функции в DLL и сделаете их вызываемыми извне обычными средствами (например, вызываемыми процессом, который загружает библиотеку), то они будут "публичными" и для других. Можно замаскировать имена и тому подобные вещи, но это, вероятно, не лучшее решение.

Возможно, лучше поместить их в статически подключаемую библиотеку, а не в DLL. Заметим, однако, что даже в этом случае кто-то может дизассемблировать двоичный файл и добраться до кода.

1
ответ дан 14 December 2019 в 13:26
поделиться

Если вы хотите предоставить доступ только к определенным функциям в вашей DLL, вы можете создать файл экспорта (dllname.def), который вы передаете компоновщику при сборке проекта. Этот файл экспорта содержит список функций, которые вы хотите сделать общедоступными для приложений, использующих вашу DLL.

Дополнительную информацию см. В статье MSDN здесь .

Я думаю, что вы также можете добиться аналогичной функциональности, используя ключевое слово __ declspec (dllexport) в функциях, которые вы хотите экспортировать.

0
ответ дан 14 December 2019 в 13:26
поделиться

Используйте

static int ReceiveAll(SOCKET sd, char *buf, int len);

и т. Д., Чтобы сделать функции локальными для файла / модуля компиляции.

5
ответ дан 14 December 2019 в 13:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: