Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > runtime error 216 at 5b261531 в dll при завершении


Автор: Volkogriz 10.2.2013, 18:48
Доброе время суток!
Всё в принципе работает но При завершении приложения вылетает ошибка,runtime error 216 at 5b261531
я перерыл всё но так и не понял что не так?
длл пока пустая практически,
Код

library DBDLL;

uses
  ShareMem,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls,
  IdHTTP;

//{$R *.res}


Function SplashFormS(Reference:String; IdleTime:integer):Boolean; stdcall;
var
  SplashForm: TForm;
  SplashImage: TImage;
begin
  SplashForm := TForm.create(nil);
  with SplashForm do
  begin
    BorderStyle := bsNone;
    Position := poScreenCenter;
    ClientWidth :=700; //Screen.Width
    ClientHeight :=450;// Screen.Height
   end;
    SplashImage := TImage.Create(SplashForm);
  with SplashImage do
    begin
   SplashImage.Picture.LoadFromFile(extractfilepath(Application.ExeName)+Reference);
    Stretch := true;
    Align := alClient;
    Parent := SplashForm;
    end;
  with SplashForm do
   begin
     Show;
      begin
      Repaint;
       Sleep(IdleTime);
      end;
     Close;
     Free;
   end;
 end;
exports SplashFormS;


Function Communication(const Reference:String):String; stdcall;
var
 Stream:TMemoryStream;
 url,r:WideString;
 i,j:integer;
 Prices:TIdHTTP;
 List:TStringList;
 begin
Prices:=TIdHTTP.Create(Prices);
Stream:=TMemoryStream.Create;
List:=TStringList.Create;
BEGIN
    try
List.LoadFromFile('Relocation.id');
url:= Reference; //ññûëêà íà íîâóþ âåðñèþ
//List.Strings[0]; //ññûëêà íà íîâóþ âåðñèþ
 for i:=1 to length(url) do
 begin
 if url[i]='.' then
 begin
 j:=i;
 end;
 end;
 r:=copy(url,j+1,length(url));
 Prices.Get(url,Stream);
 Stream.SaveToFile('DB\PricesDB.DB'); //ïóòü è íàçâàíèå êóäà ñîõðàíÿåì
 Stream.Free;
 except
      on e:Exception do
      Stream.Free; End;
      Communication:='Îáíîâëåíèå çàâåðøèíî'
End;
End;
exports Communication;

begin
end.

Но по пойму ошибка здесь но где именно не пойму:
Код


Function SplashFormS(Reference:String; IdleTime:integer):Boolean; stdcall;
var
  SplashForm: TForm;
  SplashImage: TImage;
begin
  SplashForm := TForm.create(nil);
  with SplashForm do
  begin
    BorderStyle := bsNone;
    Position := poScreenCenter;
    ClientWidth :=700; //Screen.Width
    ClientHeight :=450;// Screen.Height
   end;
    SplashImage := TImage.Create(SplashForm);
  with SplashImage do
    begin
SplashImage.Picture.LoadFromFile(extractfilepath(Application.ExeName)+Reference);
    Stretch := true;
    Align := alClient;
    Parent := SplashForm;
    end;
  with SplashForm do
   begin
     Show;
      begin
      Repaint;
       Sleep(IdleTime);
      end;
     Close;
     Free;
   end;
 end;
exports SplashFormS;

Помогите разобраться.
За ранее благодарен.
С уважением,
Volkogriz! 

Автор: DarkProg 10.2.2013, 19:47
Ставлю на ShareMem smile
А если по серьёзному, просто загрузите и выгрузите библиотеку, и затем закройте приложение, будет ли ошибка или нет?


P.S. на неделе как раз накололся с ShareMem. Всё, больше не буду использовать эту каку. Симптом схож(только у меня при закрытии формы как раз при выгрузке библиотеки вылетал инвалидный указатель и всё, дальше использовать данный класс формы было невозможно, помогло отключение ShareMem и затем двухчасовое переписывание библиотеки)

Автор: Volkogriz 10.2.2013, 20:04
 ставил в начале ShareMem потом убрал)
Выгружаю но ошибка та же.
Переписывать слава богу 2 секунды)
но при добавлении этого ошибка(
Код

Function SplashFormS(Reference:String; IdleTime:integer):Boolean; stdcall;
var
  SplashForm: TForm;
  SplashImage: TImage;
begin
  SplashForm := TForm.create(nil);
  with SplashForm do
  begin
    BorderStyle := bsNone;
    Position := poScreenCenter;
    ClientWidth :=700; //Screen.Width
    ClientHeight :=450;// Screen.Height
   end;
    SplashImage := TImage.Create(SplashForm);
  with SplashImage do
    begin
SplashImage.Picture.LoadFromFile(extractfilepath(Application.ExeName)+Reference);
    Stretch := true;
    Align := alClient;
    Parent := SplashForm;
    end;
  with SplashForm do
   begin
     Show;
      begin
      Repaint;
       Sleep(IdleTime);
      end;
     Close;
     Free;
   end;
 end;
exports SplashFormS;  

Автор: DarkProg 10.2.2013, 22:00
Цитата(Volkogriz @  10.2.2013,  20:04 Найти цитируемый пост)
но при добавлении этого ошибка(

Просто от того что добавляете процедуру или от того используете ее?

Добавлено через 52 секунды
Цитата(Volkogriz @  10.2.2013,  20:04 Найти цитируемый пост)
ереписывать слава богу 2 секунды)

Ну выключить то да две секунды )

Автор: Volkogriz 10.2.2013, 22:06
если просто добавил в длл-ку скомпилировал, запускаю, закрываю и тут бац и ошибка)
Вынимаю функцию компилирую и опять ошибка блин smile
Пере запускаю проект с сохранённой копии и всё ок.
ну и по кругу так ;) 

Автор: northener 11.2.2013, 00:46
Цитата(Volkogriz @  10.2.2013,  20:04 Найти цитируемый пост)
 ставил в начале ShareMem

Как ставил ShareMem в dll видно в приведенном коде. А как ставил ShareMem в проекте использующем эту dll?

Автор: Volkogriz 11.2.2013, 00:53
В том же порядке )
и ещё, убираю модуль  ExtCtrls всё ок! 
но без него никак, использую Image .

Автор: bems 11.2.2013, 02:20
Цитата(Volkogriz @  10.2.2013,  20:04 Найти цитируемый пост)
     Close;
     Free;

Close может означать и Free, зависит от CloseAction в обработчике
нет ли тут двойного освобождения?

Автор: Volkogriz 11.2.2013, 12:26
Я методом научного тыка выяснил,
Ставишь модуль даже без кода в длл ку ExtCtrls и вылетает ошибка ( 

Автор: northener 11.2.2013, 15:46
Цитата(Volkogriz @  11.2.2013,  00:53 Найти цитируемый пост)
В том же порядке )

А где именно? Надеюсь в файле проекта (dpr)?

Автор: Volkogriz 11.2.2013, 19:12
неа)
В pas-е smile
но и dpr не помогает(

Автор: northener 11.2.2013, 19:24
Цитата(Volkogriz @  11.2.2013,  19:12 Найти цитируемый пост)
неа)
В pas-е

В pas-е как раз не нужно. Нужно именно в dpr! 

Автор: Keeper89 11.2.2013, 23:28
А обойтись без SharedMem и сделать "нормальную" dll нельзя?

Автор: northener 12.2.2013, 01:05
Цитата(Keeper89 @  11.2.2013,  23:28 Найти цитируемый пост)
А обойтись без SharedMem и сделать "нормальную" dll нельзя?

А это, пардон, как?
И что значит "нормальную"?

Автор: DarkProg 12.2.2013, 10:12
Цитата(northener @  12.2.2013,  01:05 Найти цитируемый пост)
А это, пардон, как?
И что значит "нормальную"? 

А это работая только вчистую с памятью, ну либо используя исключительно те типы данных которые понимает винда по наитию. И создавая dll по канонам виндоуса, чтобы потом можно было и к проекту на других ЯП подтянуть.

IMHO как-то так smile

Автор: Keeper89 12.2.2013, 22:49
northener
DarkProg в целом выразил мою мысль smile
Цитата(DarkProg @  12.2.2013,  10:12 Найти цитируемый пост)
используя исключительно те типы данных которые понимает винда по наитию. И создавая dll по канонам виндоуса, чтобы потом можно было и к проекту на других ЯП подтянуть.


Добавлено через 32 секунды
А если это не таким образом делать, то я не вижу смысла делать выбор в сторону dll, а не bpl.

Автор: northener 12.2.2013, 22:53
Цитата(Keeper89 @  12.2.2013,  22:49 Найти цитируемый пост)
northener, 
DarkProg в целом выразил мою мысль smile
Цитата(DarkProg @  12.2.2013,  10:12 Найти цитируемый пост)
используя исключительно те типы данных которые понимает винда по наитию. И создавая dll по канонам виндоуса, чтобы потом можно было и к проекту на других ЯП подтянуть.


Добавлено через 32 секунды
А если это не таким образом делать, то я не вижу смысла делать выбор в сторону dll, а не bpl. 

Согласен.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)