Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.039 c
14-1121329770
SergeyDon
2005-07-14 12:29
2005.08.07
работа поиска на сайте?


4-1118051080
Андрей Жук
2005-06-06 13:44
2005.08.07
Аналог делфийского Format в WinAPI


1-1121677818
Руслана
2005-07-18 13:10
2005.08.07
Как получить имя узла по которому щелкнули в TreeView?


1-1121773434
msguns
2005-07-19 15:43
2005.08.07
События динамически создаваемых объектов


6-1114085582
Gek1
2005-04-21 16:13
2005.08.07
Проблема с TClientSocket





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский