Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы c dll, Не связываются программы и dll (CString) 
V
    Опции темы
Death_Master
Дата 19.6.2008, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.2.2008

Репутация: нет
Всего: нет



При попытке связать dll и программу лезут ошибки 
Код

1>Linking...
1>GUI1Dlg.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) class ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > __cdecl sparse(class ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t,class ATL::ChTraitsCRT<wchar_t> > >)" (__imp_?sparse@@YA?AV?$CStringT@_WV?$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@V12@@Z) referenced in function "public: void __thiscall CGUI1Dlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CGUI1Dlg@@QAEXXZ)
1>C:\Documents and Settings\Администратор\Мои документы\Visual Studio 2008\Projects\GUI1\Debug\GUI1.exe : fatal error LNK1120: 1 unresolved externals
1>Build log was saved at "file://c:\Documents and Settings\Администратор\Мои документы\Visual Studio 2008\Projects\GUI1\GUI1\Debug\BuildLog.htm"
1>GUI1 - 2 error(s), 0 warning(s)


В dll 
Код

extern "C++" __declspec(dllexport) CString sparse(CString in_sql);

В проге
Код

extern "C++" __declspec(dllimport) CString sparse(CString in_sql);

Чую, грабли где-то рядом... но пока не знаю где ...
P.S. не спал(30 минут в день не считаю сном) около недели...

Это сообщение отредактировал(а) Death_Master - 19.6.2008, 09:45
PM MAIL   Вверх
Death_Master
Дата 19.6.2008, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.2.2008

Репутация: нет
Всего: нет



Эхх..
Похоже в вечеру не успеть...
Проклясть МелкоСофт чтоли..
PM MAIL   Вверх
voov
Дата 19.6.2008, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: нет
Всего: 8



У меня была похожая проблема.
http://forum.vingrad.ru/forum/topic-203281...d-external.html
PM MAIL   Вверх
EnergoHokum
Дата 19.6.2008, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: 3
Всего: 6



DLL и программа генерировались одинаковыми компиляторами (вплоть до версии)? При "торчании" наружу сложных типов данных (хотя-бы даже std::string) возможны проблемы, если связываемые ДЛ-ка и программа генерировались различными компиляторами. С stdlib я такие проблемы огребал (прицеплял ДЛ-ку, сгенерированную GCC, MSVS и BBuilder-ом).
Вместо CString отдавай указатель на массив char-ов, а принимающий пусть переводит его в CString самостоятельно.

Это сообщение отредактировал(а) EnergoHokum - 19.6.2008, 17:27
PM MAIL ICQ   Вверх
Death_Master
Дата 19.6.2008, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.2.2008

Репутация: нет
Всего: нет



Замена на 
Код

extern "C" __declspec(dllimport) wchar_t * sparse(wchar_t* in_sql, int nn);

не помогает...
PM MAIL   Вверх
Rififi
Дата 19.6.2008, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 2
Всего: 36



проверь соответствие опций компиляции, в частности /Zc:wchar_t
PM MAIL   Вверх
Death_Master
Дата 19.6.2008, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.2.2008

Репутация: нет
Всего: нет



Цитата(Rififi @  19.6.2008,  20:14 Найти цитируемый пост)
/Zc:wchar_t 

проверил...
не помогло..

Это сообщение отредактировал(а) Death_Master - 19.6.2008, 21:24
PM MAIL   Вверх
EnergoHokum
Дата 20.6.2008, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: 3
Всего: 6



Так, а если попробовать динамическое связывание? Я обычно только с ним и работаю.
PM MAIL ICQ   Вверх
xvr
Дата 20.6.2008, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(Death_Master @ 19.6.2008,  09:39)
При попытке связать dll и программу лезут ошибки 
Код

1>Linking...
1>GUI1Dlg.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) class ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > __cdecl sparse(class ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t,class ATL::ChTraitsCRT<wchar_t> > >)" (__imp_?sparse@@YA?AV?$CStringT@_WV?$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@V12@@Z) referenced in function "public: void __thiscall CGUI1Dlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CGUI1Dlg@@QAEXXZ)
1>C:\Documents and Settings\Администратор\Мои документы\Visual Studio 2008\Projects\GUI1\Debug\GUI1.exe : fatal error LNK1120: 1 unresolved externals
1>Build log was saved at "file://c:\Documents and Settings\Администратор\Мои документы\Visual Studio 2008\Projects\GUI1\GUI1\Debug\BuildLog.htm"
1>GUI1 - 2 error(s), 0 warning(s)


В dll 
Код

extern "C++" __declspec(dllexport) CString sparse(CString in_sql);

В проге
Код

extern "C++" __declspec(dllimport) CString sparse(CString in_sql);

Чую, грабли где-то рядом... но пока не знаю где ...
P.S. не спал(30 минут в день не считаю сном) около недели...

Библиотеку импорта при линковке не забыл подать?

PM MAIL   Вверх
Death_Master
Дата 21.6.2008, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.2.2008

Репутация: нет
Всего: нет



Цитата(xvr @  20.6.2008,  11:40 Найти цитируемый пост)
Библиотеку импорта при линковке не забыл подать?

не забыл...


Цитата(EnergoHokum @  20.6.2008,  06:46 Найти цитируемый пост)
Так, а если попробовать динамическое связывание? Я обычно только с ним и работаю. 

Скинь пример кода, если не трудно...
PM MAIL   Вверх
EnergoHokum
Дата 23.6.2008, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: 3
Всего: 6



Код

/* HANDLE подгружаемой библиотеки */
HMODULE hModule;
/* Определяем тип "указатель на функцию, возвращающую int
и принимающую const char*, void* и int" */
typedef __declspec(dllimport) int (*pS) (const char*,void*,int);
/* Создаём экземпляр этого типа */
pS pStart=NULL;
/* Загружаем DLL-ку в процесс */
hModule=::LoadLibrary("./loadercore.dll");
if(hModule == NULL)
{/* Неудача при загрузке библиотеки */
    /* Какой-нить код по обработке этой ошибки */
}
/* Получаем из неё указатель на функцию Start */
pStart=(pS)::GetProcAddress(hModule,"Start");
if(pStart == NULL)
{/* Не удалось получить адрес функции Start */
    /* Какой-нить код по обработке этой ошибки */
        if(::FreeLibrary(hModule) == 0)
        {/* Неудачное освобождение библиотеки загрузчика */
            /* Какой-нить код по обработке этой ошибки */
        }
}
/* Выполняем её */
if(pStart(ofn.lpstrFile,hWnd,sizeof(HWND)) != 0)
{/* Ошибка выполнения функции Start */
    /* Какой-нить код по обработке этой ошибки */
        if(::FreeLibrary(hModule) == 0)
        {/* Неудачное освобождение библиотеки загрузчика */
            /* Какой-нить код по обработке этой ошибки */
        }
}
/* Поработали с DLL-кой -- не забываем её выгрузить! */
if(::FreeLibrary(hModule) == 0)
{/* Неудачное освобождение библиотеки загрузчика */
    /* Какой-нить код по обработке этой ошибки */
}

PM MAIL ICQ   Вверх
xvr
Дата 23.6.2008, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(Death_Master @ 21.6.2008,  02:09)
Цитата(xvr @  20.6.2008,  11:40 Найти цитируемый пост)
Библиотеку импорта при линковке не забыл подать?

не забыл...

Тогда только внимательное исследование как библиотеки импорта, так и самой dll на предмет наличия требуемого символа. Исследовать с помощью dumpbin  smile 
PM MAIL   Вверх
Death_Master
Дата 23.6.2008, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.2.2008

Репутация: нет
Всего: нет



Цитата(xvr @  23.6.2008,  10:46 Найти цитируемый пост)
Тогда только внимательное исследование как библиотеки импорта, так и самой dll на предмет наличия требуемого символа. Исследовать с помощью dumpbin  

символ есть...
PM MAIL   Вверх
xvr
Дата 23.6.2008, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(Death_Master @ 23.6.2008,  11:19)
Цитата(xvr @  23.6.2008,  10:46 Найти цитируемый пост)
Тогда только внимательное исследование как библиотеки импорта, так и самой dll на предмет наличия требуемого символа. Исследовать с помощью dumpbin  

символ есть...

Шайтан шайтан, могу посоветовать большой шаманский бубен, говорят помогает  smile 
Или давай файл проекта (.sln + .vcproj) - будем смотреть  smile 
PM MAIL   Вверх
Death_Master
Дата 24.6.2008, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 14.2.2008

Репутация: нет
Всего: нет



Решил передачей побайтово чарами...
Ректально, но работает...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0570 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.