Попытка инициализировать CRT более одного раза - PullRequest
1 голос
/ 13 декабря 2010

Я использую VS2008 для переноса кода из VC6.Когда я запускал новое приложение сборки, я получаю эту ошибку «R6031 Попытка инициализировать CRT более одного раза. Это указывает на ошибку в вашем приложении».

В общей сложности 21 dll, которые участвуют впостроить это одно приложение.В некоторых DLL есть файлы .c и они явно вызывают _CRT_INIT () в DllMain.код ниже:

BOOL APIENTRY DllMain (HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
 switch( dwReason) 
 {
  case DLL_PROCESS_ATTACH:
  case DLL_THREAD_ATTACH:
  case DLL_THREAD_DETACH:
  case DLL_PROCESS_DETACH:

      if(!_CRT_INIT( hModule, dwReason, lpReserved))
    return FALSE;

   break;
 }

 return TRUE;
}

Я не уверен, как решить эту проблему.Нужно ли комментировать вызов _CRT_INIT ()?

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

Ответы [ 2 ]

3 голосов
/ 13 декабря 2010

Да, вам не нужно явно вызывать _CRT_INIT().Возможно, он вызывается тем или иным DLLMain.

Подробнее см. MSDN .

Редактировать

Я думаю,вы неправильно прочитали MSDN:

При создании библиотеки DLL, которая использует любую из библиотек времени выполнения C, чтобы обеспечить правильную инициализацию CRT, либо

  1. функция инициализации должна иметь имя DllMain (), а точка входа должна быть указана с помощью опции компоновщика -entry: _DllMainCRTStartup @ 12 - или -

Вам присвоено имя функция инициализации DllMain(), поэтому _CRT_INIT() - это , вызываемая автоматически.Я думаю.

Почему бы просто не закомментировать эту строку и посмотреть, что произойдет?

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

Этот код ошибки характерен для сборок в смешанном режиме. Вы включили CLR во время порта по ошибке? Вы не должны видеть это во время простого порта от VC6 до более поздней версии Visual C ++.

Эта диагностика показывает, что MSIL инструкции выполнялись во время замок загрузчика. Для получения дополнительной информации см. Инициализация смешанных сборок.

Вы можете проверить настройки проекта, щелкнув правой кнопкой мыши проект в Обозревателе решений, а затем в разделе Свойства выберите Свойства конфигурации -> Общие -> Поддержка поддержки общего языка

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