Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » FAQ по Borland C++ Builder

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Открыть новую тему     Написать ответ в эту тему

EZH



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
spike
Проще всего вызвать консольную версию UnRar с нужными ключами (идес вместе с WinRar).

Всего записей: 1738 | Зарегистр. 02-09-2004 | Отправлено: 18:12 01-03-2006
Kott



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
так же не сложно использовать unrar.dll
Во первых включить файл unrar.h.
Во вторых - прочесть readme.
Вот пример функции, которая распаковывает или тестирует архив - в зависимости от mode.
 
   
Цитата:
:
    //Запись логов
    void LogEvents(const String &message){
     String tmpmessage = DateTimeToStr(Now())+"\t"+message;
      Word Year, Month, Day;
      TDateTime Current = Now();
      DecodeDate(Current,Year,Month,Day);
      TVarRec arg[3] = {2,Month,Day};
      String M = Format("%2.2d",&arg[1],0);
      String D = Format("%2.2d",&arg[2],0);//buffer;
      String LogFile = "message"+IntToStr(Year)+M+D+".log";
      ofstream file(LogFile.c_str(),ios::app);
      file << tmpmessage.c_str()<<"\n";
      file.close();
    }
    //Собствено распаковка
    void ExtractArchive(char *ArcName,int Mode)
    {
      HANDLE hArcData;
      int RHCode,PFCode;
      char CmtBuf[16384];
      struct RARHeaderData HeaderData;
      struct RAROpenArchiveDataEx OpenArchiveData;
 
    //Инициализируем память под структуру  
     memset(&OpenArchiveData,0,sizeof(OpenArchiveData));
    //Заполняем структуру
 
      OpenArchiveData.ArcName=ArcName;
      OpenArchiveData.CmtBuf=CmtBuf;
      OpenArchiveData.CmtBufSize=sizeof(CmtBuf);
 
    //Что делаем - распаковываем или тестируем
    //Собственно можно передавать непосредственно //флаг - не помню уже почему была выбрано так    
 
      if(Mode == 0)
      OpenArchiveData.OpenMode=RAR_EXTRACT;
      else OpenArchiveData.OpenMode=RAR_TEST;
      hArcData=RAROpenArchiveEx(&OpenArchiveData);
 
      if (OpenArchiveData.OpenResult!=0)
      {
       LogEvents("Error open archive "+ (AnsiString)ArcName);
        return;
      }
 
 
      HeaderData.CmtBuf=NULL;
       String Temp;
      while ((RHCode=RARReadHeader(hArcData,&HeaderData))==0)
      {
    //TmpDir - строка которая содержит путь  - куда распаковывать.
    //Должна быть объявлена и инициализирована ранее
 
        Temp = TmpDir+ExtractFileName(HeaderData.FileName);
        PFCode=RARProcessFile(hArcData,RAR_EXTRACT,TmpDir.c_str(),Temp.c_str());
        if (PFCode==0){
          LogEvents("The file "+ (AnsiString)HeaderData.FileName + " is extracted success");
        }
        else
        {
          LogEvents("The file "+ (AnsiString)HeaderData.FileName + " is extracted failed");
        }
      }
 
      if (RHCode==ERAR_BAD_DATA)
       LogEvents("Error archive data "+(AnsiString)ArcName);
 
      RARCloseArchive(hArcData);
    }
 

Всего записей: 161 | Зарегистр. 12-12-2003 | Отправлено: 19:32 01-03-2006 | Исправлено: Kott, 19:35 01-03-2006
spike



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kott
а где взять unrar.dll и unrar.h ?
 
Добавлено:
у меня есть, но для версии rar 2
а сейчас уже 3 версия архиватора

Всего записей: 693 | Зарегистр. 23-10-2003 | Отправлено: 10:37 02-03-2006
Kadavr



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
spike На оф сайте - www.rarlab.com

Всего записей: 176 | Зарегистр. 19-03-2004 | Отправлено: 10:58 02-03-2006
spike



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
млин
при подключении dll-ки unrar через lib файл
ошибка

Код:
[ILINK32] Error: 'D:\!MYPROJECTS\UNRAR\GUI\UNRAR.LIB' contains invalid OMF record, type 0x21 (possibly COFF)

Всего записей: 693 | Зарегистр. 23-10-2003 | Отправлено: 16:08 06-03-2006
tomegadeth



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
spike попробуй создать свою либу

Цитата:
implib.exe -c -f unrar.lib unrar.dll

Всего записей: 560 | Зарегистр. 22-11-2004 | Отправлено: 16:19 06-03-2006
Kott



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если используешь либ-файл - его обязательно необходимо перековертировать. Используй coff2omf - или грузи динамически.

Всего записей: 161 | Зарегистр. 12-12-2003 | Отправлено: 16:44 06-03-2006
spike



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tomegadeth
сенькс, заработало

Всего записей: 693 | Зарегистр. 23-10-2003 | Отправлено: 17:13 06-03-2006 | Исправлено: spike, 17:14 06-03-2006
Pigmeich

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго время суток всем.
Столкнулся со следующей проблеммой:
Файлы откомпилированные билдером не хотят запускатся без доступа к некоторым библиотекам, причём если сравнивать с дельфи, то программа занимающая на дельфи 300-400 кб, на билдере вместе с библиотеками занимает около 2Мб.
Потому вопросы:
1. Есть ли способ заставить включать библиотеки (vcl60.bpl например) в исполняемые файлы?
2. Можно ли довести размер файлов до дельфийских 300-400 Мб?

Всего записей: 2 | Зарегистр. 10-03-2006 | Отправлено: 13:57 10-03-2006
dyr farot

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
1. на закладке свойств линкера убери галку "use dynamic RTL"
на закладке пакетов -- убери галку с runtime пакетов.
2. до 300х сотен метров простыми методами не доведеш. разве-что пойти по пути дяди нортона и нулями добивать. только смысл?..

Всего записей: 697 | Зарегистр. 03-08-2004 | Отправлено: 15:27 10-03-2006
Pigmeich

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dyr farot, сенкс, помогло. Вторую галку я сам не нашёл.
Ну а про метры - все поняли что имелось в виду, правильно?

Всего записей: 2 | Зарегистр. 10-03-2006 | Отправлено: 15:01 12-03-2006
Kadavr



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pigmeich
До скольки угодно метров раздувается не кодом, а формочками. Берёшь неиспользуемую форму и кидаешь на неё несколько картинок побольше. Получаешь прирост в несколько десятков мегов...

Всего записей: 176 | Зарегистр. 19-03-2004 | Отправлено: 11:54 13-03-2006
bandyn



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
где можно заказать BDS 2006 почтой разумеется крякнутой?
или может кто-нибудь вышлет копию?
а то у нас в городе никогда не найти!
Расходы все оплачу!




что ты понимаешь под крякнутой почтой? И при чем вопрос здесь? В варезнике подобное.

Всего записей: 394 | Зарегистр. 18-11-2004 | Отправлено: 17:30 27-03-2006 | Исправлено: ShIvADeSt, 01:43 28-03-2006
royt

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Необходимо на BCB 6.0 программно (не в отладчике) получить call stack - список вызовов процедур. Есть ли для этого какие-то готовые исходники (библиотеки)?
 
Есть самописный набор функций (основанный на _http://win32.mvps.org/misc/stackwalk.html и других исходниках), делающий всё что надо с помощью Debug Help API (dbghelp.dll) - но при условии, что с exe-шником поставляется файл .dbg (в соответствующем формате). Далее, есть тулза map2dbg (от Lucian Wischik, _http://www.wischik.com/lu/programmer/), которая позволяет сформировать этот .dbg-файл по .map-файлу, генерируемому BCB - но только для Borland C++Builder 5. Но BCB6 стал генерировать .map-файлы, которые чем-то отличаются от .map-файлов BCB5, и map2dbg с ними работает некорректно (т.е. какой-то .dbg файл выдается, но call stack по нему не определяется).
Попалось вот такое сообщение "Stackwalk, map2dbg, BCB6 - solved" (от 2003-09-03), но концов не нашел.
 
Есть некая "Borland Debug Hook Library", это два файла:
bordebug.dll,
bordebug.h
Но она тоже для BCB5, для BCB6 не попадалось. Да и описание к ней довольно скудное, примеров нету - в свое время не смог заставить работать даже с BCB5.
 
Знаю еще про JCL (Jedi, JVCL), но ихний debug handler выводит call stack с именами процедур (функций) без номеров строк (место вызова в исходнике). В описании сказано, что для runtime packages номеров исходников ждать не стоит в принципе (т.к. Borland не предоставляет информацию о номерах строк даже в отладочных версиях билиотек: "Borland does not provide detailed MAP files for them so you get procedure or method name only"), но про номера строк компилируемого приложения ничего не говорится - т.е., вроде как, можно ждать вывода номеров строк. Цитата: "To get line number information for Borland RTL and VCL/CLX units you have to check Use Debug DCUs checkbox...". Тем не менее, у меня номера строк не выводятся, а выглядит стек вызовов примерно так:

Код:
Exception EAccessViolation occured in @TForm1@StartButtonClick$qqrp14System@TObject at 0 in file
Message: Access violation at address 0044C3CE in module 'SomeApplication.exe'. Read of address 00000170
Call stack:
[0044C3CE] Form1.OBJ.@TForm1@StartButtonClick$qqrp14System@TObject
[00620F3F] RTL.LIB|System.@System@@HandleAnyException$qqrv
[0060414A] RTL.LIB|Math.@Math@Ceil$qqrxg
[006574C2] VCL.LIB|Graphics.@Graphics@TCanvas@GetHandle$qqrv
[006CA85A] VCL.LIB|Buttons.@Buttons@_16428
...
[0066E12E] VCL.LIB|Forms.@Forms@TApplication@Run$qqrv
[00401F2B] SomeApplication.OBJ.WinMain
[0061F81D] RTL.LIB|System.@System@@GetMem$qqri
...
[006CD314] VCLE.LIB|dstring.@System@AnsiString@$bdtr$qqrv
[00401BA7] SomeApplication.OBJ.@C4_2
Может все-таки JCL можно заставить выводить номера строк, удавалось ли кому то это сделать?
Кроме того, jcl формирует на основе .map-файла отладочную информацию в каком-то своем формате (JDBG). Может хотя бы есть способ заставить формировать его "обычный" .dbg ...
 
Есть еще EurekaLog (для Delphi/BCB). С ним идут исходники (вроде бы все, хотя точно не знаю), но они все на паскале и довольно объемные. Проблем со знанием паскаля нету, просто очень желательно иметь готовые исходники именно на C или C++ (не буду слишком вдаваться в подробности, почему так). В общем вариант - только переписывать на C++, на что надо приличное время...  
 
 
p.s. (безотносительно к решению основного вопроса): Кто знает, какие отличия появились в структуре .map-файла между BCB 5.0 и 6.0? Хочется все-таки заставить map2dbg корректно работать с .map-файлами от BCB6.

Всего записей: 319 | Зарегистр. 18-08-2004 | Отправлено: 11:50 31-03-2006 | Исправлено: royt, 12:05 31-03-2006
RUNaum



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто-нибудь знает что не так с проектом, если он с определенного момента начинает линковаться только с включенным CodeGuard?
С выключенным CodeGuard выдает ошибки:
Код:
[Linker Error] Unresolved external '_CG_DESC'  
[Linker Error] Unresolved external '_CG_THIS'
[Linker Error] Unresolved external '_CG_A_BP'
[Linker Error] Unresolved external '_CG_DA_EPY'
[Linker Error] Unresolved external '_CG_GDA_EGY'

Всего записей: 306 | Зарегистр. 25-11-2005 | Отправлено: 08:31 15-05-2006
xitsa



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Необходимо на BCB 6.0 программно (не в отладчике) получить call stack - список вызовов процедур. Есть ли для этого какие-то готовые исходники (библиотеки)?  
 

Попробуй madCollection, там есть madStackTrace — по–моему, то что тебе нужно+madExcept

Всего записей: 103 | Зарегистр. 25-04-2006 | Отправлено: 10:11 16-05-2006
royt

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Попробуй madCollection, там есть madStackTrace
да, спасибо. Правда за прошедшее время сам уже вышел на эту библиотеку. Но опять же, сорцы все на паскале.
 
Также набрел еще на Exceptional Magic. Тоже сорцы все на паскале. Однако именно на этой Exceptional Magic пока и остановился - потому как довольно просто оказалось достучаться до функций библиотеки, позволяющих самому сформировать отчет о call stack. (в EurekaLog это сделать не там просто).
 
С madCollection пока особо не разбирался. Но, если правильно понял, основные функции реализованы в поставляемой с библиотекой .dll-ке - это уже минус, иногда неудобно. Зато похоже реализация покачественнее, чем у Exceptional Magic (если коротко - в последней производится анализ стека и делаются "предположения" насчет адреса/источника вызова, благодаря чему можно определить вызовы функций без stack frame, но при этом часто библиотека и ошибается, показывая "лишние" вызовы; возможно этот "анализ" можно отключить, но пока это не выяснял)
 
В общем будем рыть, но похоже проще будет перейти на BDS2006, кажись там теперь есть штатные средства для обсуждаемой задачи.

Всего записей: 319 | Зарегистр. 18-08-2004 | Отправлено: 15:09 17-05-2006
spike



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
какой нужен код символа для edit в password, чтобы были кружки, как в XP ?

Всего записей: 693 | Зарегистр. 23-10-2003 | Отправлено: 16:10 18-05-2006
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
spike
А это кажеться специальный контролл. Для него символы не просматриваются в помощью утилит типа OpenPass

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 16:33 18-05-2006 | Исправлено: OdesitVadim, 16:35 18-05-2006
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim

Цитата:
А это кажеться специальный контролл. Для него символы не просматриваются в помощью утилит типа OpenPass

Нет это обычный контрол и обычный символ (где то видел его скан код), как вариант запусти The Bat под ХР и увидишь там такие кружки, но пароль вытаскивается на ура. Вот только какой код не помню, там вроде надо шрифт какой то выбирать.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:56 19-05-2006
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » FAQ по Borland C++ Builder


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru