![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Fantasist |
|
||||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Итак, это то, с чем я столкнулся и что решил довольно грубым методом.
Есть lib файл стороннего разработчика, скомпилированном на VC70 (как видно из самого файла). Этот либ экспортирует классы (declspec dllimport/dllexport). Есть и заголовочный файл с описанием этих классов. Так вот при рассматривании этого файла, обнаруживаем экспортный символ такого вида:
Это так выглядить декорированный метод CBaseTable::OpenFrom(CString&, long); в этой либе. У меня есть такое описание, но при его компиляции моя VS порождает вот такой вот декорированный символ:
Как видите, вместо StrTraitMFC_DLL используется StrTraitMFC. Это один из параметров шаблона класса CString, который каждый может найти в afxstr.h. Естесственно, на этапе линковки все это дело обламывается, так как символы не совпадают. Вот вопрос, у кого есть VS7.x не скажет ли он какой у него в этом месте класс. Или может кто-то слышал о таких косяках и методах борьбы с ними. Я, конечно, это обошел, но довольно грубо. Это сообщение отредактировал(а) Fantasist - 14.7.2004, 00:00 -------------------- Волны гасят ветер... |
||||
|
|||||
| AndyY |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
Fantasist
возможно проблема в том, что в либе используется линковка MFC в виде DLL, а у вас в проекте - статически |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Если бы все было бы так просто я бы не постил сюда вопрос. Меня тоже вначале суффикс _DLL смутил, но я изучил исходники - там никаких подстановок нет, да и зачем они в шаблонном классе? Он в любом случае залинкуется статически - его реализацию в dll не вынесешь. На всякий случай я все же попробовал разные типы линковки - результат оказался ожидаемым. -------------------- Волны гасят ветер... |
|||
|
||||
| mr.DUDA |
|
||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Шаблон-то он шаблон, но вот подстановка его аргументов зависит от макросов типа "AFX_DLL". Поясняю.
Вышеприведённые классы:
И в зависимости от макросов получается:
-------------------- ![]() |
||||
|
|||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Эту возможность я безусловно допускал, хотя не вижу в ней практического смысла, и проверил ее первым делом. Я же говорю, что внимательно изучил исходники и загаловочные файлы - StrTraitMFC_DLL в них нигде не встречается. Вдобавок, не полагаясь только на свою внимательность, я попробовал разные типы линковки. Между прочим, обо всем этом я уже сказал выше, и теперь фактически повторил свой вротой пост. Естесственно, возникла у меня мысль, что в какой-то версии студии этот класс был добавлен или, наоборот, убран. В общем-то, оригинальный мой вопрос и был о том, не знает ли кто этих различий и у кого как (с версией студии). -------------------- Волны гасят ветер... |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
2 Fantasist,
в моём ответе были использованы исходники из VS 2003. -------------------- ![]() |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |