Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.026 c
2-1151295732
Urvin
2006-06-26 08:22
2006.07.16
Canvas как параметр


3-1147780912
novill
2006-05-16 16:01
2006.07.16
Как очистить строку от лидирующих/завершающих непечатных символов


1-1149593869
tasha
2006-06-06 15:37
2006.07.16
WebBrowser


15-1150456037
aka
2006-06-16 15:07
2006.07.16
about Com


1-1149500016
Kolan
2006-06-05 13:33
2006.07.16
Как использовать только часть массива?