Форум: "WinAPI";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
ВнизLoadString,LoadBitmap и прочие load... Найти похожие ветки
← →
TeNY © (2005-02-15 08:53) [0]Почему этот код не работает?Я открываю файл 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;
← →
Anatoly Podgoretsky © (2005-02-15 09:04) [1]Она то грузится, только вопрос куда, чью ты память испохабил?
← →
Чапаев © (2005-02-15 09:48) [2]1) Как правильно заметил старший товарищ, неплохо бы под PChar память выделить.
2) Неплохо бы проверять, успешно ли загрузился файл.
← →
icWasya © (2005-02-15 19:02) [3]например так
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;
← →
TeNY © (2005-02-16 16:26) [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<>0 then begin
GetMem(TChar,255);
LoadString(hExe,4094,TChar,255);
Memo1.Text:=TChar;
end;
FreeLibrary(hExe);
end;
end;
← →
GuAV © (2005-02-16 18:11) [5]
> 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 18:25) [6]
Type of expression must be BOOLEAN
напротив
> if not LoadString(hExe,4094,TChar,255) then
и
[Warning] Unit1.pas(47): Symbol "RaiseLastWin32Error" is deprecated
напртив
> RaiseLastWin32Error;
← →
GrayFace © (2005-02-16 19:05) [7]TeNY © (16.02.05 18:25) [6]
Напиши вместо него if LoadString(hExe,4094,TChar,255)=0 then
А, чтобы Warning"a не было - RaiseLastOSError вместо RaiseLastWin32Error.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.051 c