![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Mastkir |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 11.5.2006 Репутация: нет Всего: нет |
Необходимо сделать динамическую библиотеку.
В одном классе объявлена статическая переменная. Пишу для класса __declspec(dllexport). Получается примерно следующее: class __declspec(dllexport) A { ... static char* variable; } В .сpp: char* A::variable; Потом заменил на: __declspec(dllexport) char* A::variable; , но все равно не помогло. Вообще, в helpe написано, что для переменных (правда, для обычных, не статических) впереди еще extern писать надо. Но если где - то написать, то не компилируется. Да и потом, для класса я __declspec(dllexport) написал. Ну а там, где библиотека используется, пишется: unresolved external symbol "public: static char* A::variable" Как экспортировать переменную static, находящуюся внутри класса? |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
А попробуй написать
Там, где эта штука используется... Хотя для меня все равно не ясно, почему стат. переменная, объявленная внутри класса, не экспортируется вместе с самим классом... |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
надо писать с использованием директив препроцессора:
|
|||
|
||||
| Mastkir |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 11.5.2006 Репутация: нет Всего: нет |
Получается, статических переменных вообще не должно быть в классе для экспорта. |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Mastkir, да как же это? Можешь использовать, просто в клиентский код добавь ту же самую .h- ку, в которой у тебя объявлены DLL-функции. В этот хедер добавь то, что сказал bsa, и все! Должно получиться!
|
|||
|
||||
| Mastkir |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 11.5.2006 Репутация: нет Всего: нет |
Все - таки статические переменные из dll в другом проекте использовать не удастся.
Оказалось, что экспортироваться-то она экспортировалась, но память под нее в новом проекте не выделена: error LNK2001: unresolved external symbol "public: static int A::variable" (?test1@A@@2HA) (для выделения памяти под статические переменные ее следует повторно объявить в модуле компиляции, в котором она будет использоваться, т.е. int A::variable). Если сделать это еще раз в клиентском коде, то получается, что библиотека работает с одной памятью для нее, а приложение - с другой. (Она все - таки используется в приложении). Написав тестовый пример(я так и сделал), можно убедиться, что экспорт проходит удачно, однако память оказалась разная. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Тогда закрой эту переменную статическими методами Set/Get и работай через них.
|
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Если работаешь с VS, то в этом случае нужно указать соответственно модель
Multithread DLL, чтобы память была одна -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |