Тема: Сборка плагина для AutoCAD 2000 с помощью MSVC 2008.

Использую для сборки плагина BuildHook, упомянутый на manusoft.com и позволяющий переключаться между Build Tools.
Имею проект для MS Visual Studio 2005, настроенный для сборки плагина на основе ObjectARX 2000, 2004, 2007.

Открыл данный проект в MS Visual Studio 2008, настроил конфигурации для сборки на основе ObjectARX 2010. Так же продолжают собираться версии для ObjectARX 2004 и 2007. При сборке на основе ObjectARX 2000 возникают следующие ошибки линковки:

error LNK2019: unresolved external symbol "wchar_t * __stdcall _com_util::ConvertStringToBSTR(char const *)" (?ConvertStringToBSTR@_com_util@@YGPA_WPBD@Z) referenced in function "public: __thiscall _bstr_t::Data_t::Data_t(char const *)" (??0Data_t@_bstr_t@@QAE@PBD@Z)
error LNK2001: unresolved external symbol "wchar_t * __stdcall _com_util::ConvertStringToBSTR(char const *)" (?ConvertStringToBSTR@_com_util@@YGPA_WPBD@Z)

Схожий вопрос был рассмотрен на social.msdn.microsoft.com, однако совет из данной темы мне не помог. В соответсвии с ним при сборке дебажной версии плагина я указывал линковщику библиотеку comsupp.lib либо comsuppwd.lib и выставлял компилятору опцию /Zc:wchar_t.

Буду благодарен за любую подсказку. Спасибо

(изменено: Александр Ривилис, 21 мая 2009г. 16:01:55)

Re: Сборка плагина для AutoCAD 2000 с помощью MSVC 2008.

У тебя MS Visual Studio 2008 с SP1?
Попробуй подключить comsuppw.lib

(изменено: equilibrium, 21 мая 2009г. 17:40:58)

Re: Сборка плагина для AutoCAD 2000 с помощью MSVC 2008.

Да, студия 2008 с SP1.

Указал библиотеку comsuppw.lib при линковке, компилятору указал опцию /Zc:wchar_t, собирал в дебаг и релиз режимах. Предупреждения и ошибки линковки одинаковы для обоих сборок:

comsuppw.lib(comutil.obj) : warning LNK4078: multiple '.CRT' sections found with different attributes (40300040)

comsuppw.lib(comutil.obj) : error LNK2019: unresolved external symbol ___security_cookie referenced in function "wchar_t * __stdcall _com_util::ConvertStringToBSTR(char const *)" (?ConvertStringToBSTR@_com_util@@YGPA_WPBD@Z)
comsuppw.lib(invkprxy.obj) : error LNK2001: unresolved external symbol ___security_cookie
comsuppw.lib(invkprxy.obj) : error LNK2019: unresolved external symbol @__security_check_cookie@4 referenced in function "long __cdecl _com_invoke_helper(struct IDispatch *,long,unsigned short,unsigned short,void *,wchar_t const *,char *,struct IErrorInfo * *)" (?_com_invoke_helper@@YAJPAUIDispatch@@JGGPAXPB_WPADPAPAUIErrorInfo@@@Z)

(изменено: Александр Ривилис, 21 мая 2009г. 18:49:34)

Re: Сборка плагина для AutoCAD 2000 с помощью MSVC 2008.

Надеюсь, что библиотеки для AutoCAD 2000 у тебя берутся из VC++ 6.0? И соответственно компилятор, линкер и .h и .lib файлы оттуда же? Судя по ошибкам не похоже. В VC++ есть только одна библиотека: COMSUPP.LIB и в ней этот метод имеет вид:

?ConvertStringToBSTR@_com_util@@YGPAGPBD@Z (unsigned short * __stdcall _com_util::ConvertStringToBSTR(char const *))

Т.е. /Zc:wchar_t не подойдет.

Re: Сборка плагина для AutoCAD 2000 с помощью MSVC 2008.

Да, действительно, в VC++ 6.0 только одна библиотека: COMSUPP.LIB. Я пробовал её самой первой. И имел ошибки линковки следующего вида:

error LNK2019: unresolved external symbol "wchar_t * __stdcall _com_util::ConvertStringToBSTR(char const *)" (?ConvertStringToBSTR@_com_util@@YGPA_WPBD@Z) referenced in function "public: __thiscall _bstr_t::Data_t::Data_t(char const *)" (??0Data_t@_bstr_t@@QAE@PBD@Z)
error LNK2019: unresolved external symbol "char * __stdcall _com_util::ConvertBSTRToString(wchar_t *)" (?ConvertBSTRToString@_com_util@@YGPADPA_W@Z) referenced in function "public: char const * __thiscall _bstr_t::Data_t::GetString(void)const " (?GetString@Data_t@_bstr_t@@QBEPBDXZ)

Так как использую для сборки плагина Build Tools VC++ 7.1, то пробовал после и библиотеки из этой версии.

Re: Сборка плагина для AutoCAD 2000 с помощью MSVC 2008.

Проблема сборки решилась выставлением опции

/Zc:wchar_t-

Явно указывать линкеру  библиотеку COMSUPP.LIB не понадобилось. И поправка: для сборки плагина в моем случае используются Build Tools VC++ 7.0, а не 7.1.