она вызывает конструктор, который в свою очередь использует внешнюю функцию WSAStartup.
Всё это дело крашится если модуль с WSAStartup не подгрузился на момент инициализации _g_smtp_init.
В проэкте много модулей где этот selectany мог построится, и непонятно как проконтролировать загрузку нужного модуля до этой строчки.
Как выход, используем delay-load, но есть потребность обойтись как нибудь без него.
Может есть какой способ управлять очерёдностью подгрузки статически линкованных модулей?
P.S. VS2005, c++, ATL
04.05.10 18:10: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Здравствуйте, _nn_, Вы писали:
__>Единственным решением будет ее убрать совсем. __>Нельзя вызывать WSAStartup в DllMain и тем более до нее.
Не хотим делать изменения во внешней библиотеке, мало-ли с чем оно потом будет не совместимо... __>P.S. __>Кстати, откуда вы брали этот файл ?
VS2005 __>Начиная с VS2008 он не поставляется, а содержится в другом проекте http://atlserver.codeplex.com/ .
Там эта проблема не решена. __>Как обычно с проектами где код открыт, можно написать в багтрекер и предложить исправление.
Нет возможности ждать их решения, хотелось бы всё-таки контролировать порядок загрузки модулей. Это было бы идеальным решением без лишней зависимости...
Здравствуйте, Caracrist, Вы писали:
__>>Как обычно с проектами где код открыт, можно написать в багтрекер и предложить исправление. C>Нет возможности ждать их решения, хотелось бы всё-таки контролировать порядок загрузки модулей. Это было бы идеальным решением без лишней зависимости...
Можно попробовать порядок либов (.lib) подсунуть линкеру в желаемом порядке, но это не гарантирует ничего.
А не нужно ждать решения, просто возьмите исходники и уберите эту строчку, ну заодно и патч предоставьте.