Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.07;
Скачать: CL | DM;

Вниз

RC-файлы   Найти похожие ветки 

 
Ertong ©   (2005-06-09 20:52) [0]

Где можно найти полный синтаксис этого формата?

Нужно создать ресурс с точками в именах.
Brcc32 не пропускает следующий RC-файл
-------------------------------------------
Some_Name.ext sometype SomeFile
-------------------------------------------

Но как-то же можно создавать ресурсы с такими именами.
Если воспользоватся любым бинарным редактором и изментиь в откомпилированом res-файле какой-то символ в имени ресурса на точку, то все работает нормально.

Но при каждой перекомпиляции ресурсного файла не очень хочется сидеть в бинарном редакторе и исправлять имена.

Можно, конечно, написать для этой операции программу, но не извесно какой символ изменить. В именах ресурсов могут встречатся все допустимые символы.


 
Anatoly Podgoretsky ©   (2005-06-09 20:59) [1]

В чем глубокая мысль этого требования?


 
Ertong ©   (2005-06-09 21:06) [2]

Хранить в ресурсах файлы с полноценными именами.


 
Просто Джо ©   (2005-06-09 21:32) [3]

Кажется, уже обсуждалось. Борландовский компилятор ресурсов "не любит" точку в имени идентификатора ресурса. Скомпилируй майкрософтовским, он, если не ошибаюсь, такое "проглатывает".


 
Ertong ©   (2005-06-10 00:27) [4]


> Просто Джо

Я так понял майкрософтский входит в Visual C++. Но у меня его нет. Может где-то в нете есть этот компилятор ресурсов. Кинте ссылочку плз. Я даже не знаю имени этого компилятора ресурсов, что-бы поискать.


 
Ertong ©   (2005-06-10 01:26) [5]

За это время я уже нашел формат RES файла и написал простенький компилятор. Поддерживает только прикрепление файлов и только с текстовыми типами. Кому интересно вот код.


{$APPTYPE CONSOLE}
uses Windows, kol;
const
 FileHead:array[0..7] of Cardinal =
    ($00000000, $00000020, $0000FFFF, $0000FFFF,
     $00000000,$00000000, $00000000, $00000000);

Function parseStr(var p:longint;s:string):string;
var
 st:longint;
begin
 st:=0;
 result:="";
 while p<length(s) do
   begin
     inc(p);
     case st of
       0:begin
           if s[p]<>" " then
             if s[p]=""" then st:=2
                         else begin
                                st:=1;
                                result:=result+s[p];
                              end;
         end;
       1:begin
           if s[p]=""" then st:=2 else
             if s[p]=" " then break else result:=result+s[p];
         end;
       2:begin
           if s[p]=""" then break else result:=result+s[p];
         end;
     end;
   end;
end;

var
 f:TextFile;
 SourceFN, DestFN:string;
 Stream,DestStr:PStream;
 ResName,ResType, ResFile:WideString;
 p,i,sz:longint;
 st:longint;
 s:string;
 head1:record DataSize,HeadSize:Cardinal end;
 head2:packed record
         DataVersion:Cardinal;
         Flags:Word;
         Language:Word;
         Version:Cardinal;
         Characteristics:Cardinal;
       end;
 b:byte;
begin
 if ParamCount<1 then
   begin
     WriteLn("ResComp <rc file name>");
     halt;
   end;
 SourceFN:=ParamStr(1);
 DestFN:=ChangeFileExt(SourceFN,".res");

 assignFile(f,SourceFN); Reset(f);

 if FileExists(DestFN) then deleteFile(pChar(DestFN));
 DestStr:=NewFileStream(DestFN,ofOpenWrite or ofShareExclusive or ofCreateNew);

 DestStr.Write(pointer(@FileHead)^,SizeOf(FileHead));
 b:=0;
 while not seekeof(f) do
   begin
     Readln(f,s);
     s:=UpperCase(s);
     p:=0;
     ResName:=ParseStr(p,s)+#0;
     ResType:=ParseStr(p,s)+#0;
     ResFile:=ParseStr(p,s);

     Stream:=NewFileStream(ResFile,ofOpenRead or ofShareExclusive or ofOpenExisting);

     head1.DataSize:=Stream.Size;
     head1.HeadSize:=Sizeof(Head1)+Sizeof(Head2)+Length(ResName)*2+Length(ResType)*2;
     if (Length(ResName)+Length(ResType)) mod 2<>0 then
       inc(head1.HeadSize,2);
     ZeroMemory(@Head2,Sizeof(Head2));
     Head2.Flags:=$0030;
     Head2.Language:=$0409;

     DestStr.Write(head1,Sizeof(head1));
     DestStr.Write(ResType[1],Length(ResType)*2);
     DestStr.Write(ResName[1],Length(ResName)*2);
     if (Length(ResName)+Length(ResType)) mod 2<>0 then
       begin
         DestStr.Write(b,1);
         DestStr.Write(b,1);
       end;
     DestStr.Write(head2,Sizeof(head2));

     Stream2StreamEx(DestStr,Stream,Stream.Size);

     sz:=Stream.Size;
     while sz mod 4 <>0 do
       begin
         inc(sz);
         DestStr.Write(b,1);
       end;

     Stream.Free;
   end;

 DestStr.Free;
 CloseFile(f);
end.


Строго не судите. Писал на быструю руку.  Если есть ошибки - скажите.

Но тем не менее жду информацию по майкрософтскому компилятору.


 
Просто Джо ©   (2005-06-10 05:39) [6]

По запросу "Microsoft resource compiler" Google выдал кучу ссылок. Самая первая ссылка ведет на сайт Майкрософт, где и можно узнать название файла. Оно является образцом здорового минимализма: RC.EXE :^)


 
Просто Джо ©   (2005-06-10 05:43) [7]

Забыл добавить: входит в комплект Resource SDK.


 
Гарри Поттер ©   (2005-06-10 08:17) [8]

RC с такой строчкой: Some_Name EXT "D:\Some_Name.ext" компилится нормально. Может тебе это надо было?



Страницы: 1 вся ветка

Текущий архив: 2005.08.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.06 c
3-1119954763
pashtet
2005-06-28 14:32
2005.08.07
Компонент для выполнения скрипта БД.


14-1121420388
KSergey
2005-07-15 13:39
2005.08.07
Не отображаются создаваемые папки под произвольным пользователем


1-1121327704
Apachi
2005-07-14 11:55
2005.08.07
Работа с большими целыми числами


14-1121554016
imm
2005-07-17 02:46
2005.08.07
Помогите с докой.


4-1118335938
Ertong
2005-06-09 20:52
2005.08.07
RC-файлы