Как инициализировать msvcrt.dll? - PullRequest
2 голосов
/ 14 декабря 2010

Если я делаю LoadLibrary ("msvcrt.dll"), мне нужно как-то инициализировать CRT? Раздел 2 в следующем документе, кажется, говорит, что я это делаю, но я просто получаю неопределенную ошибку символа для _CRT_INIT, когда пытаюсь вызвать _CRT_INIT:

http://support.microsoft.com/kb/94248

Редактировать: я должен был сказать, что это для программы, которая динамически загружает все библиотеки, которые она использует, следовательно, вызов LoadLibrary ("msvcrt.dll").

Ответы [ 4 ]

4 голосов
/ 14 декабря 2010

Звоните DllMain() в нем. Если он зависит от среды выполнения C, он вызовет CRT_INIT.

Но гораздо лучший вопрос: если программа использует что-то в msvcrt, нет необходимости явно загружать dll и инициализировать ее, так почему вы это делаете?

1 голос
/ 14 декабря 2010

Если вы работаете в C ++, вы объявили _CRT_INIT как extern "C"?

Пробовали ли вы использовать утилиту DUMPBIN (http://support.microsoft.com/kb/177429 - если у вас нет 'PATH Вы сами должны использовать командную строку Visual Studio (я думаю) с переключателем /EXPORTS, чтобы узнать, какие функции доступны из библиотеки CRT, просто чтобы дважды проверить?

Если вы застряли, VS2005 и более ранние версии (и, вероятно, позже ...) поставляются с исходным кодом для библиотеки времени выполнения.Для VS2005 это в VC/crt/src относительно папки установки VS.Похоже, _CRT_INIT - правильное имя - см. crtdll.c и dllcrt0.c, и это функция C.

0 голосов
/ 14 декабря 2010

Ссылка, на которую вы ссылались, относится к использованию CRT_INIT () только тогда, когда "Использование библиотек CRT при создании DLL" , и даже тогда это только одна из двух альтернатив; первое, вероятно, предпочтительнее в большинстве случаев.

0 голосов
/ 14 декабря 2010

Вы не должны звонить _CRT_INIT () , но звонить CRT_INIT () (если вам действительно нужно)

...