Как создать подпрограмму инициализации DLL? - PullRequest
4 голосов
/ 30 марта 2011

В документации DllMain Entry Point автор делает следующий комментарий:

Чтобы обеспечить более сложную инициализацию, создайте процедуру инициализации для DLL.Вы можете требовать, чтобы приложения вызывали подпрограмму инициализации перед вызовом любых других подпрограмм в DLL.

В C / C ++, как я могу создать другую подпрограмму и требовать, чтобы приложение вызывало ее перед любой другой?

Ответы [ 3 ]

2 голосов
/ 30 марта 2011

Процедура инициализации может быть любой экспортируемой функцией.Хитрость в том, чтобы «требовать, чтобы другие приложения вызывали его».Чтобы обеспечить его выполнение, вам необходимо проверить, был ли он вызван практически во всех других экспортируемых функциях.Если каждая экспортируемая функция имеет некоторый общий префиксный код, это было бы хорошим местом для проверки, была ли вызвана функция инициализации.

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

2 голосов
/ 30 марта 2011

Каноническим примером этого является InitCommonControlsEx(). Вы должны заставить пользователей вашей DLL вызывать ваши процедуры инициализации и завершения точно так же.

1 голос
/ 30 марта 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...