![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
LoadString,LoadBitmap и прочие load...
TeNY © (2005-02-15 08:53:00)Почему этот код не работает?Я открываю файл Delphi32.ехе в котором есть строка с идентификатором 4094(Ресторатором посмотрел) а она не грузится?
procedure TForm1.Button1Click(Sender: TObject);
var
hExe:HWND ; // handle to existing .EXE file
TChar:PChar;
begin
if OpenDialog1.Execute then
begin
hExe := LoadLibrary(pchar(OpenDialog1.FileName));
LoadString(hExe,4094,TChar,255);
Memo1.Text:=TChar;
FreeLibrary(hExe);
end;
GrayFace (2005-02-16 19:05:00) [1]TeNY © (16.02.05 18:25) [6]
Напиши вместо него if LoadString(hExe,4094,TChar,255)=0 then
А, чтобы Warning'a не было - RaiseLastOSError вместо RaiseLastWin32Error.
TeNY (2005-02-16 18:25:00) [2]
Type of expression must be BOOLEAN
напротив
> if not LoadString(hExe,4094,TChar,255) then
и
[Warning] Unit1.pas(47): Symbol 'RaiseLastWin32Error' is deprecated
напртив
> RaiseLastWin32Error;
GuAV (2005-02-16 18:11:00) [3]
> hExe := LoadLibrary(pchar(OpenDialog1.FileName));
> if hExe<>0 then begin
> GetMem(TChar,255);
> LoadString(hExe,4094,TChar,255);
> Memo1.Text:=TChar;
> end;
> FreeLibrary(hExe);
hExe := LoadLibrary(pchar(OpenDialog1.FileName));
if hExe = 0 then RaiseLastWin32Error;
try
GetMem(TChar,255);
try
if not LoadString(hExe,4094,TChar,255) then
RaiseLastWin32Error;
finally
FreeMem(TChar)
end;
finally
FreeLibrary(hExe);
end;
Что скажет ?
TeNY (2005-02-16 16:26:00) [4]
> icWasya © (15.02.05 19:02) [3]
А сам то проверял работоспособность своего кода на предмет загрузки этой строки?
> Anatoly Podgoretsky © (15.02.05 09:04) [1]
> Она то грузится, только вопрос куда, чью ты память испохабил?
речь не памяти
даже если и выделять память при помощи GETMEM строка всё равно не грузится!Да и Bitmap тоже.
> Чапаев © (15.02.05 09:48) [2]
> 1) Как правильно заметил старший товарищ, неплохо бы под
> PChar память выделить.
> 2) Неплохо бы проверять, успешно ли загрузился файл.
Всё сделал!Всё равно не работает
вот исправленный текст
procedure TForm1.Button1Click(Sender: TObject);
var
hExe:HWND ; // handle to existing .EXE file
TChar:pchar;
begin
if OpenDialog1.Execute then begin
hExe := LoadLibrary(pchar(OpenDialog1.FileName));
if hExe<>0then begin
GetMem(TChar,255);
LoadString(hExe,4094,TChar, 255);
Memo1.Text:=TChar;
end;
FreeLibrary(hExe);
end;
end;
icWasya (2005-02-15 19:02:00) [5]например так
procedure TForm1.Button1Click(Sender: TObject);
var
hExe:HWND ; // handle to existing .EXE file
TChar:array [0..255] of char;
begin
if OpenDialog1.Execute then begin
hExe := LoadLibrary(pchar(OpenDialog1.FileName));
if hExe<>0 then begin
LoadString(hExe,4094,TChar,sizeof(TChar));
Memo1.Text:=TChar;
FreeLibrary(hExe);
end;
end;
end;
Чапаев (2005-02-15 09:48:00) [6]1) Как правильно заметил старший товарищ, неплохо бы под PChar память выделить.
2) Неплохо бы проверять, успешно ли загрузился файл.
Anatoly Podgoretsky (2005-02-15 09:04:00) [7]Она то грузится, только вопрос куда, чью ты память испохабил?