Главная страница
    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.46 MB
Время: 0.008 c
15-1149859574
AlexanderMS
2006-06-09 17:26
2006.07.16
Задачка на сообразительность


15-1150402399
AKS
2006-06-16 00:13
2006.07.16
вакансия: программист delphi на удаленную работу


1-1149560100
Explorer
2006-06-06 06:15
2006.07.16
Экспорт данных в Источник данных Worda


2-1151652451
newbie2
2006-06-30 11:27
2006.07.16
Как добавить bpl в dpr?


2-1151579681
fast2
2006-06-29 15:14
2006.07.16
Как проверить, что переменная типаTDate "пустая", т.е....





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский