Форум: "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