如何察看res文件,如何把里面的内用拿出来,例如有个空间big5gb里面用了码表,我想提取码表如何作?(100分)

  • 主题发起人 主题发起人 delphi4.0
  • 开始时间 开始时间
You can use Borland Resource Worlshop or MS VC++ to open the resource
file.
 
How to program to do it?
 
这不是一个简单的控件或一个小程序所能完成的事,尤其是资源文件中的
资源可能是wav,string,image,icon等多种资源格式,若真有这么个控件,
Borland公司及VC++中的资源管理器就失业了,这无议于编写一个大型程序,
我想了想,实在太复杂,但也不是不可以。希望你还是现实一点,不要为
这绞尽脑汁。
 
不知什么原因,我的答案没贴上去,只好再写一遍。
请参考Delphi Demos
Borland/Delphi4/Demos/Resxplor/resxplor
 
你在仔细的读一下Big2Gb.pas/Gb2Big.pas的源程序. 他是通过TResourceStream.read
得到的.
constructor TGB2BIG.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
GBTAB := TResourceStream.Create(Instance, 'GB2BIG', RT_RCDATA);
end;

function TGB2BIG.GBtoBIG5(S: string): string;
var
bak: string;
C : array[0..1] of Byte;
I : Integer;
W : PWordArray;
CA : array[0..2] of Char;
begin
bak := '';
W := @(C[0]);
I := 1;
while I <= Length(S) do
begin
C[1] := Byte(S);
if C[1] > $A0 then //如果是LeadingByte
begin
inc(I, 1);
C[0] := Byte(S);
inc(I, 1);
W[0] := W[0] - GBfirst; //算出字符位置
GBTAB.Position := W[0] * 2; //Stream 指针定位
GBTAB.read (CA, 2); //读 Stream
CA[2] := #0;
bak := bak + StrPas(CA);
end
else
begin
bak := bak + S;
inc(I, 1);
end;
end;
Result := bak;
end;
 
看我的!
lpsz1=要转换的文字,lpsz2结果存储缓冲,n2缓冲长度,fGB2BIG5转换方向,TRUE=GB->BIG5,FALSE=BIG->GB

void Convert(LPSTR lpsz1,LPSTR lpsz2,int n2, BOOL fGB2BIG5)
{
WCHAR wszBuff[MAX_BUFFER];
int n;
n = MultiByteToWideChar(
fGB2BIG5 ? 936 : 950,
MB_PRECOMPOSED,
lpsz1,lstrlen(lpsz1)+1,
wszBuff,MAX_BUFFER);
WideCharToMultiByte(
fGB2BIG5 ? 950:936,
WC_COMPOSITECHECK,
wszBuff,n,
lpsz2,n2,
NULL,NULL);
}

在NT下执行没问题,Win9x下没试。用这个来生成转换表也是非常简单的呢。
 
抱歉,抱歉。顺手用C写了一个,两条函数就搞定岂不爽快?
如果用得到,劳驾转一下吧。
这个程序用来直接帮你转字串。至于处理Resource是很容易的,
以EnumResXXXXX打头的函数就是。可以查MSDN. Sample Code就不必写了吧。

 
多人接受答案了。
 

Similar threads

D
回复
0
查看
941
DelphiTeacher的专栏
D
D
回复
0
查看
880
DelphiTeacher的专栏
D
D
回复
0
查看
956
DelphiTeacher的专栏
D
D
回复
0
查看
785
DelphiTeacher的专栏
D
后退
顶部