Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2012, 02:08   #1
LynXzp
Пользователь
 
Аватар для LynXzp
 
Регистрация: 04.10.2012
Сообщений: 95
По умолчанию extern массив строк

Первый ShowMessage выдает пустую строку (и потом программа нач. глючить)
Второй ShowMessage правильное число.
Код:
	extern UTF8String a[];
	ShowMessage(Utf8ToAnsi(a[0]));
	extern int acount;
	ShowMessage(acount);
Массив 100% инициализирован, нулевой элемент не пустой.
Если разместить ShowMessage(Utf8ToAnsi(a[0])); в модуле где объявлен - все норм.

Если индекс элемента поставить 1, а не 0 CodeGuard обматюкает (с нулем молчит как партизан)
Цитата:
Access overrun: Attempt to access 4 byte(s) at 0x004EA1C4+4, that is at offset
0+4 in block 0x004EA1C4(=Play2me.exe:0x02:0001C4 ) which is only 4 bytes
long.
(вообще им не пользуюсь, тут вдруг вспомнил)

Массив структур работает:
Код:
	extern mystruct *t;
	ShowMessage(Utf8ToAnsi(t[1].file));
Не так объявляю?
Код:
extern UTF8String a[];
extern UTF8String *a; компилятор не дает. Может звездочка начинает не туда лезть.... не знаю.

P.S. Если объявить просто в подключаемом.h файле то компилятор говорит что многочисленные объявления.

P.P.S. Пока писал вспомнил что все глобальные меж-Unit строки (AnsiString) делал в члены класса какой-нить формы, но не в этот раз - надоело натыкаться на прозрачную стену, а что-то не гуглится. Создать массив структур с одной строкой внутри? *facepalm*

P.P.P.S. Попробовал вот так:
Код:
	extern AnsiString str1;
	ShowMessage(str1);
Заработало! О Чудо! Точно раньше не работало, по крайней мере в потоке. Все-таки звездочка?
Пишу на чистом С, плюсы спилил.
LynXzp вне форума Ответить с цитированием
Старый 15.12.2012, 07:57   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Вы на 64-й (API) пытаетесь втиснуть библиотеку 32-й, отсюда и проблемы. Апликейшн, даёт автоматическую настройку под систему. Используйте его.
Код:
Applicication->ShowMessageA(Utf8ToAnsi(a[0]),"");
Цитата:
extern UTF8String *a; компилятор не дает. Может звездочка начинает не туда лезть.... не знаю.
Это чё, прикол? Чё курим? Тогда я иду к Вам.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 15.12.2012 в 08:05.
Smitt&Wesson вне форума Ответить с цитированием
Старый 15.12.2012, 13:05   #3
LynXzp
Пользователь
 
Аватар для LynXzp
 
Регистрация: 04.10.2012
Сообщений: 95
По умолчанию

32? 64? Это что разрядность? Turbo C++ (Builder 2006).Кажется 64 не имеет.
Цитата:
[C++ Error] Unit1.cpp(158): E2316 'ShowMessageA' is not a member of 'TApplication'
И ShowMessage тоже не член Application. Наверное вы давали совет по поводу последних RAD...
И ShowMessageA ... Call to undefined function
MessageBox(NULL,Utf8ToAnsi(a[0]).c_str(),"txt",
MessageBoxA(NULL,Utf8ToAnsi(a[0]).c_str(),"txt",... Обе дают аналогично пустой текст (второй текст отображается)

Так работает:
Цитата:
struct bst
{UTF8String str;};
Цитата:
extern bst *b;
ShowMessage(Utf8ToAnsi(b[0].str));
Костелизм, надо dll в gcc [или в чем-нить другом, т.к. gcc тоже с вы*крутасами] писать, а гуи пока в билдере.
Пишу на чистом С, плюсы спилил.

Последний раз редактировалось Stilet; 15.12.2012 в 15:26.
LynXzp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как преобразовать массив строк в массив чисел на C#? orfos Помощь студентам 4 03.10.2014 15:56
Extern/export Red_Line Общие вопросы C/C++ 1 02.09.2011 13:50
extern Linnk Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 13.08.2010 15:47
Переменная extern zgest Общие вопросы C/C++ 1 16.02.2010 14:28