Текущий архив: 2006.07.16;
Скачать: CL | DM;
ВнизПомогите The memory could not be "read". Найти похожие ветки
← →
AllBrain © (2006-03-07 14:55) [0]Здравствуйте !!!
Вот у меня такая проблема:
Я делаю программу для предварительного просмотра *.JPG файлов из интернет в виде DLL.
Код файла который запускает доп. модуль:
____
procedure IMGPreview(path:string); external "ImgviewP2P.dll";
...
procedure TForm1.Button1Click(Sender: TObject);
begin
IMGPreview(edit1.Text);
end;
Cообственно сама Dll + PPForm:
procedure IMGPreview(path:string);
begin
PPForm := TPPForm.Create(Application);
PPForm.Position:=poScreenCenter;
PPForm.image1.Tag:=111;
PPForm.Image1.Hint:=path;
PPForm.ShowModal;
end;
exports IMGPreview;
И сообственно код формы DLL:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Gauges,jpeg, StdCtrls, ExtCtrls,wininet;
type
TPPForm = class(TForm)
Gauge1: TGauge;
Button1: TButton;
Button2: TButton;
Image1: TImage;
SaveD: TSaveDialog;
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
procedure LoadUrl(htfile:string);
function GetInetFile (const fileURL, FileName: String): boolean;
{ Public declarations }
end;
var
PPForm: TPPForm;
implementation
{$R *.dfm}
function TPPForm.GetInetFile (const fileURL, FileName: String): boolean;
const BufferSize = 1024;
var
hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
f: File;
sAppName: string;
begin
Result:=False;
sAppName := ExtractFileName(Application.ExeName);
hSession := InternetOpen(PChar(sAppName),
INTERNET_OPEN_TYPE_PRECONFIG,
nil, nil, 0);
try
hURL := InternetOpenURL(hSession,
PChar(fileURL),
nil,0,0,0);
try
AssignFile(f, FileName);
Rewrite(f,1);
repeat
InternetReadFile(hURL, @Buffer,
SizeOf(Buffer), BufferLen);
BlockWrite(f, Buffer, BufferLen)
until BufferLen = 0;
CloseFile(f);
Result:=True;
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end
end;
procedure TPPForm.Button2Click(Sender: TObject);
begin
close;
end;
procedure TPPForm.Button1Click(Sender: TObject);
begin
if SaveD.Execute() then
begin
if Saved.FilterIndex=1 then SaveD.DefaultExt:="bmp" else SaveD.DefaultExt:="jpg";
Image1.Picture.SaveToFile(SaveD.FileName);
end;
end;
procedure TPPForm.FormActivate(Sender: TObject);
begin
if image1.Tag=111 then
begin
Image1.Tag:=0;
LoadUrl(image1.Hint);
end;
end;
procedure TPPForm.LoadUrl(htfile:string);
var
FileOnNet, LocalFileName: string;
begin
FileOnNet:= htfile;
LocalFileName:="temp.jpg";//ExtractFileName(Image1.Hint);
if GetInetFile(FileOnNet,LocalFileName)=True then image1.Picture.LoadFromFile("temp.jpg")
else ShowMessage("Error in file download");
end;
Как всё происходит я запускаю Exe-фаил -> открываеться окно с выбором ссылки где находиться JPeg-фаил (http://worm.zethost.net/images/news/Video/Blondinka_v_zakone.jpg) -> Нажимаю ссылка передаёться DLL, которая выводит окно и загружает картинку -> Я закрываю окно созданное dll-ой -> Окно закрываеться -> Но когда я закрываю программу из которой была запущена форма DLL, то выскакивает ошибка =>
The instruction at "xxxxxxxxx" reference memory at "xxxxxxxxxxx".The memory could not be "read" - Нажимаю Ok, и выскакивает
Runtime error 216 at 003337CE . Немогу понять, что читает в памяти и не находит.
__________
Заранее благодарин тому, кто потратит на эту проблему своё драгоценное время.
← →
MU © (2006-03-07 15:06) [1]или и в вызывающей программе и в DLL
напишите первым в списке
uses модуль ShareMem;
или переделайте
procedure IMGPreview(path:string); external "ImgviewP2P.dll";
на
procedure IMGPreview(path: PChar; Length : Integer); external "ImgviewP2P.dll";
← →
AllBrain © (2006-03-07 15:09) [2]Благодпрю за ответ,но я уже понял:
смысл в том что после PPForm.ShowMedal надо Было удалить создануую мной форму PPForm.Free;
← →
MU © (2006-03-07 15:12) [3]одно другому не мешает, а первое обязательно!
← →
AllBrain © (2006-03-07 19:22) [4]А для чего ?
Страницы: 1 вся ветка
Текущий архив: 2006.07.16;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.008 c