| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > ошибка с AnsiString в dll |
| Автор: Slava99 2.6.2008, 13:05 |
| Возникла такая проблема: при использовании во внутренних функциях dll типа AnsiString возникают различные Linker Error-ы, например такие: [Linker Error] Error: Unresolved external 'System::__linkproc__ __fastcall LStrClr(void *)' referenced from C:\PROGRAM FILES\BORLAND\BDS\4.0\LIB\DEBUG\VCLE.LIB|dstring [Linker Error] Error: Unresolved external 'System::__linkproc__ __fastcall LStrFromPChar(System::AnsiString&, char *)' referenced from C:\PROGRAM FILES\BORLAND\BDS\4.0\LIB\DEBUG\VCLE.LIB|dstring [Linker Error] Error: Unresolved external 'System::__linkproc__ __fastcall LStrAsg(void *, const void *)' referenced from C:\PROGRAM FILES\BORLAND\BDS\4.0\LIB\DEBUG\VCLE.LIB|dstring Возникают эти ошибки если просто объявить переменную типа AnsiString или вызвать какую-нибудь функцию (из модуля SysUtils например, да из любого), у которой один из параметров AnsiString в любой из функций или классов моего модуля Причем такая деталь, если этот модуль подключить не к dll, а к exe проекту всё компилируется и работает отлично... |
| Автор: mrbrooks 2.6.2008, 13:25 | ||
либо облюдаем это условие либо замени AnsiString на char* |
| Автор: Slava99 2.6.2008, 14:03 |
| Это условие надо соблюдать при экспорте/импорте строк, у меня же они используются внутри. Например, я пытаюсь вызвать ф-цию FindFirst(AnsiString path, ...) и возникают ошибки. |
| Автор: mrbrooks 2.6.2008, 14:11 | ||
| А ты хочешь сказать при использование стандартных функций? Добавлено через 52 секунды Здается мне тогда что здесь вся фича в области видимости Добавлено через 1 минуту и 42 секунды Попробуй так
|
| Автор: TaNK 2.6.2008, 14:39 |
| а я юзаю ShortString в Dll |
| Автор: mrbrooks 2.6.2008, 14:41 | ||
Не имхо у него какие то траблы как я понял с вызовом стандартных функций |
| Автор: TaNK 2.6.2008, 14:43 |
| > mrbrooks код в студию наверное |
| Автор: mrbrooks 2.6.2008, 14:50 | ||
|
| Автор: Slava99 2.6.2008, 15:01 | ||
| Дело в том, что объявить локально, внутри своей функции, не экспортируемой, переменную AnsiString я тоже не могу. Простой пример (на бессмысленность кода не обращай внимания, важен сам принцип):
такая ошибка: [Linker Error] Error: Unresolved external 'System::__linkproc__ __fastcall LStrClr(void *)' referenced from C:\PROGRAM FILES\BORLAND\BDS\4.0\LIB\DEBUG\VCLE.LIB|dstring Можно вызвать стандартную ф-цию с параметром AnsiString, или самому его использовать, одно и то же. Если убрать объявление s, ошибок не возникает |
| Автор: mrbrooks 2.6.2008, 15:07 |
| ок. а ты воздержись от использования в dll вообще AnsiString и используй char* |
| Автор: TaNK 2.6.2008, 15:10 |
| >Slava99 ты как хочешь загружать dll - динамически или статически? |
| Автор: Rififi 2.6.2008, 15:14 |
Это условие необходимо соблюдать при использовании AnsiString. |
| Автор: Slava99 2.6.2008, 15:17 | ||
| Связывание будет и динамическое и статическое. Все будет зависеть от того, где ее потом будут использовать. Вот получше пример:
Здесь уже не получится работать с char*... Ну здесь-то можно обойтись без AnsiPos, но вообще мне требуется вызывать стандартные ф-ции, использующие в качестве параметров класс AnsiString. Ошибка та же. |
| Автор: mrbrooks 2.6.2008, 15:25 |
| Это почему нельзя. Найти первое вхождение в массив символов очень даже можно |
| Автор: Fazil6 2.6.2008, 15:25 |
| use vcl в свойствах проекта поставь |
| Автор: Slava99 2.6.2008, 15:48 |
| Все парни, спасибо! use vcl решило проблему. |