Почему глобальные собственные объекты вызывают проблемы в DLL C ++ / CLI? - PullRequest
3 голосов
/ 21 июня 2011

Я где-то читал, что это связано с непростыми глобальными нативными объектами, которые имеют конструкторы / деструкторы.Может кто-нибудь объяснить, что именно может вызвать проблемы?

1 Ответ

4 голосов
/ 21 июня 2011

Пример: однажды я попытался связать нативную библиотеку C ++ с приложением C ++ / CLI. Эта библиотека содержала const static std::string. Приложение всегда зависало. Причина:

Когда приложение запускается, оно инициализирует постоянные статические объекты. Чтобы убедиться, что статические объекты удаляются должным образом при выходе из приложения, компилятор генерирует вызов стандартной библиотечной функции atexit . Этот вызов вызывает сбой в собственной среде выполнения C, которая еще не инициализирована должным образом на данный момент.

Нет проблем с неконстантными статическими полями, которые инициализируются позже.

Я считаю, что это ошибка - может быть, она исправлена ​​тем временем (у меня была проблема с Visual Studio 2005). К сожалению, я не могу предоставить подходящую ссылку, но надеюсь, что это поможет вам в дальнейших исследованиях.

...