Thema: Delphi RuntimeError mit DLL

Einzelnen Beitrag anzeigen

Benutzerbild von Bluemeus
Bluemeus

Registriert seit: 1. Dez 2004
Ort: Erfurt
16 Beiträge
 
Delphi 7 Enterprise
 
#1

RuntimeError mit DLL

  Alt 7. Jan 2005, 22:49
hallo,

mein Probelm ist folgendes:

Ich habe eine DLL in mein Programm integriert. Dies tue ich, da sich einiges an funktionen angesammelt hat, was weiterverwendet werden soll.

Ich hatte die Funktion vorher im Programm selbst, wo sie tadellos funtzte...

Seit der auslagerung bekomme ich einen RuntimerError, welcher aber nur beim Beenden auftritt.

http://ftp.bluemeus.de/screenshots/debuggermeldung.gif

http://ftp.bluemeus.de/screenshots/runtimeerror.gif

Der Funktionsquellcode:
Delphi-Quellcode:
function GetFileVersion(const Filename: string; var Version: string; typ: Integer): Boolean; stdcall;
var
  VerBlk: VS_FIXEDFILEINFO;
  InfoSize,puLen : DWord;
  Pt,InfoPtr : Pointer;
begin
  Version := '';
  InfoSize := GetFileVersionInfoSize(PChar(Filename), puLen);
  FillChar(VerBlk, SizeOf(VS_FIXEDFILEINFO),0);
  if InfoSize > 0 then
  begin
    GetMem(Pt, InfoSize);
    GetFileVersionInfo(PChar(Filename), 0, InfoSize, Pt);
    VerQueryValue(Pt, '\', InfoPtr, puLen);
    move(InfoPtr^, VerBlk, SizeOf(VS_FIXEDFILEINFO));
    case typ of
    1: begin
        Version := Format('%d.%d.%d.%d',[VerBlk.dwFileVersionMS shr 16,
                                         VerBlk.dwFileVersionMS and 65535,
                                         VerBlk.dwFileVersionLS shr 16,
                                         VerBlk.dwFileVersionLS and 65535]);
       end;
    2: begin
        Version := Format('%d.%d Release %d Built %d',[VerBlk.dwFileVersionMS shr 16,
                                         VerBlk.dwFileVersionMS and 65535,
                                         VerBlk.dwFileVersionLS shr 16,
                                         VerBlk.dwFileVersionLS and 65535]);
       end;


    end;
    FreeMem(Pt);
    Result := True;
  end else
    Result := False;
end;

...

exports
 GetFileVersion name 'GetFileVersion',
 ...;
Der Programmquellcode:
Delphi-Quellcode:
unit Load;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, jpeg, StdCtrls, Registry, OneInstance;

type
  TIntro = class(TForm)
    Image1: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Timer1: TTimer;
    OneInstance1: TOneInstance;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormResize(Sender: TObject);

  private
  public
  end;

var
  Intro: TIntro;
  Version: String;

implementation
  uses main, options, MiniMode;

function GetFileVersion(const Filename: string; var Version: string; typ: Integer): Boolean; stdcall;
external 'olt_data.dll';

{$R *.dfm}

procedure TIntro.FormCreate(Sender: TObject);
begin
getfileversion(application.ExeName,version,2);

label1.Caption:= 'Version ' + version;
label2.Caption:= label1.Caption;
label3.Caption:= 'Lade Ressourcen...';
label4.Caption:= label3.Caption;

form3.Openreg;

if reg.ValueExists('MiniMode_on') then
if reg.ReadInteger('MiniMode_on') = 1 then form1.PopupMenu1.Items[3].Click;

form3.CloseReg;
end;

procedure TIntro.Timer1Timer(Sender: TObject);
begin
//form3.openreg;
//if reg.ReadInteger('Hauptfenster') = 1 then Form1.Show;
//form3.closereg;

Form3.OpenReg;
if reg.ReadInteger('Pinger') = 1 then
 begin
  form1.pingtimer.Interval:= reg.ReadInteger('Pingtime');
  form1.pingtimer.Enabled:= true;
  form1.PingTimerTimer(form1);
  form1.button1.Visible:= false;
 end
else
 begin
  form1.Button1.Visible:= true;
 end;
form3.CloseReg;

intro.Hide;
timer1.Enabled:= false;
end;

procedure TIntro.FormResize(Sender: TObject);
begin
intro.Width:= 310;
intro.height:= 229;
end;

end.

Es handelt sich hierbei um einen Ladebildschirm, der als Hauptformular dient. Er wird nach ende des Timers unsichtbar - siehe Quellcode ^^


Ich hoffe mir kann jemand von euch helfen. Ich habe bis jetzt nur Probleme mit DLL's gehabt und komme damit nicht besonders gut klar ...


Danke im Vorraus
Blue
Stephan
  Mit Zitat antworten Zitat