Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Экспорт CString из dll

59K
06 мая 2010 года
Chickenchaser
3 / / 06.05.2010
Всем доброго времени суток! Возникла такая вот проблемка. В проекте MFC-DLL есть класс, инкапсулирующий переменную CString, у этого же класса есть конструктор, принимающий параметр опять же типа CString. В основной программе, использующей эту DLL, создается в куче объект упомянутого класса с помощью того самого, принимающего CString конструктора. При сборке основной программы появляется длинное сообщение об ошибке: error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall CClass::CClass(unsigned long,class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >)" ... Если убрать из класса в DLL все упоминания о CString, сборка проходит на ура, кроме того, если не создавать экземпляр в куче, то тоже проблем не будет. В чем дело?
P.S. Заранее благодарю за ответы.
14
06 мая 2010 года
Phodopus
3.3K / / 19.06.2008
Сэмулируйте ошибку на тестовом проекте и выложите его
59K
06 мая 2010 года
Chickenchaser
3 / / 06.05.2010
Вот ссылка на тестовое решение с двумя проектами:
http://sources.codenet.ru/file/3613/Test.zip
В полной версии почти то же самое и ошибка возникает практически аналогичная. Есть подозрение, что проблема связана с декорированием имен, но что конкретно нужно сделать для ее устранения, не знаю. Если я не учел каких-то элементарных вещей при создании проектов, не судите строго - прогать на плюсах начал совсем недавно. :rolleyes:
14
07 мая 2010 года
Phodopus
3.3K / / 19.06.2008
Главная ошибка: dll собрана как unicode, приложение - как multibyte.
Сопутствующие ошибки:
Не копируйте файлы. Если приложению требуется lib не копируйте ему эту lib, а укажите где она лежит в lib path.
Не копируйте заголовки. Если заголовок используется в более чем одном проекте - вынесите его в отдельную папку верхнего уровня (для решения, либо вообще) и используйте изо всех проектов. Пропишите эту папку в additional include. Объявления классов не копируют из одного h файла в другой. Дальше это сыграет злую шутку. И вообще, перед нажатием copy/paste при работе с проектом (хоть текст, хоть файлы, хоть настройки) стоит сначала очень сильно задуматься - а то ли я делаю. Есть замечательные вещи, такие как ссылки/наследование/повторное использование.
Это из того что вчера успел заметить / сегодня вспомнил
59K
09 мая 2010 года
Chickenchaser
3 / / 06.05.2010
Премного благодарен за советы, буду разбираться.
P.S. Путь к lib-е в полной версии был прописан в Additional Dependencies и лежала она в папке "DEBUG" (поторопился с тестовым проектом), а скопипастеные объявления классов в заголовочных - результат прочтения в одной из книг по Visual C++ главы про создание DLL. Ну, да это так, к слову, а в целом еще раз спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог