HTTP-соединение непосредственно перед выходом программы из DLL с использованием Curl - PullRequest
0 голосов
/ 03 февраля 2012

Я пишу DLL в ANSI C и использую Curl для HTTP-соединений.

Эта DLL должна быть в состоянии подключиться к моему серверу для отправки некоторой информации непосредственно перед завершением работы приложения.Я хотел бы знать, каков наилучший подход для достижения этой цели.Я попытался зарегистрировать функцию обратного вызова, используя atexit, а также вызывая метод connectToServer в деструкторе.Я также пытался использовать DllMain с DLL_PROCESS_DETACH.Во всех случаях, Curl не может подключиться к серверу (код ошибки 7), потому что окна уже выгружены необходимые библиотеки, используемые Curl.

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

Библиотека, которую я пишу, работает как в Linux (.so), так и в Windows (.dll).В Linux я использую atexit, и все работает нормально.Я бы предпочел не использовать сторожевой процесс, так как я не буду использовать его на .so.

Есть ли способ сделать это?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 03 февраля 2012

Вы не должны ничего делать в DLL_PROCESS_DETACH именно по тем причинам, которые вы нашли.Лучший способ справиться с этим - явный вызов из приложения, чтобы сказать: «Я выключаюсь, сделаю любую необходимую очистку».

0 голосов
/ 03 февраля 2012

Если вы действительно хотите испортить семантику DLL_PROCESS_DETACH, вы можете вручную использовать LoadLibrary для загрузки библиотеки curl непосредственно оттуда, независимо от существующей настройки компоновщика, и вызывать ее через собственную позднюю привязку.

...