Главная страница
    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
1-1121863664
stud
2005-07-20 16:47
2005.08.07
отслеживание изменения каталога


14-1121410956
JOB
2005-07-15 11:02
2005.08.07
Вакансия - Проектировщик программного обеспечения


3-1120124765
Layner
2005-06-30 13:46
2005.08.07
Как определить тип столбца таблицы?


1-1121748535
Fynjy1984
2005-07-19 08:48
2005.08.07
Вопрос по TChart


14-1121414851
syte_ser78
2005-07-15 12:07
2005.08.07
Задачка для 6 класса.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский