Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Проблемы с глобальной переменной стат. библиотеки


Автор: petlyura 12.8.2008, 15:17
В статической библиотеке есть глобальная переменная
SUBD_CLASS AnsiString CurDir;
В exe-программе, что использует эту статическую библиотеку есть в функциях форм какие-то действия с этой CurDir.
К примеру:
Код

__fastcall TFClient::TFClient(TComponent* Owner)
        : TForm(Owner)
{
 CurDir=GetCurrentDir(); //здесь
}

Код

void __fastcall TPresentChart::FormCreate(TMessage& msg)
{  

  item = new TMenuItem(this);
  item->Caption = "&Печать ч/б";
  item->OnClick = PrintClick;    
  item->ShortCut = ShortCut(Word('P'), TShiftState() << ssCtrl);
  item->Bitmap->LoadFromFile(CurDir+"\\DB_U1\\Image\\printa.bmp"); // здесь
  PopupMenu->Items->Add(item);
}

В статической библитеке тоже есть места использования ее:
Код

void TSecurity::Write()
{
  FILE* file;
  AnsiString FileName=CurDir; //Здесь. Допустим, CurDir = "C:\\Pro";
  FileName+="\\exe\\DFile.bin"; // FileName = "C:\\Pro\\exe\\DFile.bin";
  file = fopen(FileName.c_str(), "wb");
....
}

Потом сделал чуток функциональности в других местах еще. И что происходит? Захожу с помощью отладчика в метод TSecurity::Write(), WatchList показывает, что CurDir = "C:\\Pro"; но после выполнения строчки AnsiString FileName=CurDir; FileName остается равен NULL! А уж потом "\\exe\\DFile.bin"; после выполнения FileName+="\\exe\\DFile.bin";. 
Комментирую свою добавленную функциональность (функция в стат.библиотеке и вызов ее из exe) и получаю  FileName="C:\\Pro\\exe\\DFile.bin"; Разкомментирую и снова NULL. Функция и ее вызов никакого отношения к переменной CurDir не имеют.

Кто-нибудь понимает в этом? 
П.С. код не выкладываю. Комм.тайна, да и пару сотен килострок весит

Автор: xvr 13.8.2008, 15:19
borlndmm.dll (memmgr.lib) в проект добавлена?
Пардон, не заметил, что библиотека статическая

Автор: petlyura 14.8.2008, 08:18
Я решил эту проблему, перенеся реализацию "своей добавленной функциональности" из *.cpp-файла в *.h-файл стат.библиотеки. И все! Почему так не знаю. Просто колдовал вокруг да около. И получилось.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)