Главная страница
    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.009 c
15-1150443942
Prohodil Mimo
2006-06-16 11:45
2006.07.16
Есть ли программы, тестирующие диск на чтение?


3-1147627956
drucha
2006-05-14 21:32
2006.07.16
создание бд interbase


3-1147422894
Patrick
2006-05-12 12:34
2006.07.16
Добавление в таблицу из XML-документа


2-1151252255
JTAG
2006-06-25 20:17
2006.07.16
Сделал иконку в Image Editor, подскажите плз, как сделать


15-1150355744
DillerXX
2006-06-15 11:15
2006.07.16
Программа для анимирования картинок.





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