Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.07.16;
Скачать: [xml.tar.bz2];

Вниз

Помогите 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
6-1141732535
AllBrain
2006-03-07 14:55
2006.07.16
Помогите The memory could not be "read".


15-1150280183
начинающий
2006-06-14 14:16
2006.07.16
Clipboard via COM


2-1151562868
простак
2006-06-29 10:34
2006.07.16
получение шестнадцатиричного значения символа в delphi и наоборот


1-1149103763
Phoroon~
2006-05-31 23:29
2006.07.16
Иконка чужого окна


6-1141971797
WondeRu
2006-03-10 09:23
2006.07.16
TServerSocket внутри COM-сервера.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский