Einzelnen Beitrag anzeigen

BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Event für Fehlercode-Übergabe

  Alt 20. Feb 2009, 11:37
Also habe jetzt ein Event erstellt, welches seine Tätigkeit an sich erstmal tun sollte. Leider hat sich dabei aber ein riesiger Fehler eingeschlichen, den ich selber nicht mehr erkennen kann. Das Kompilieren erfolgt ohne Probleme, allerdings gibt es bei der Erstellung der Tischkomponente eine Exception, die das gesamte Programm abschießt. könntet ihr vieleicht mal schauen, woran dies liegen kann?

Die TischUnit
Delphi-Quellcode:
unit VT_Funktionen;

interface

uses
  Windows, SysUtils, Hilfsfunktionen, ExtCtrls;

const constMillimeter = 6400;

//type TFehlerevent = procedure(iFehlercode: integer) of object;

type TV_Tische = class
  //Fehlerevent: TFehlerevent;
  private
    Tischbmp: TBitmap;
    TischDLL: TDLL_Datei;
    DLL_Handle: THandle;
    bBewegung, bkalibriert,bAngeschlossen: boolean;
    iaktuelleTischposition, iZielTischposition, iComport: integer;
    Bewegungsueberwachung: TTimer;
    function DLLFunktionen_laden: boolean;
    function Bewegtsich(const Kanal: integer): boolean;
    function Bremsen: boolean;
    function Geschwindigkeit_festlegen(const iGeschwindigkeit: integer): boolean;
    function Beschleunigung_festlegen(const iBeschleunigung: integer): boolean;
    function VTische_verbinden(Comport: integer): boolean;
    function Kalibrierung(const Kanal: integer): boolean;
    function Verfuegbarkeit: boolean;
    // Diese Funktioen müssen überprüft werden, ob sie wirklich private sein sollen
    function BewegenABS(dneuPos: double): boolean; overload;
    function BewegenABS(const KaliPos: string): boolean; overload;
    function BewegenABS(dneuPos: double; iGeschwindigkeit: integer): boolean; overload;
    function BewegenABS(dneuPos: double; iGeschwindigkeit, iBeschleunigung: integer):boolean; overload;

  public
    constructor create;
    destructor Destroy; override;
    property Handle: THandle read DLL_Handle;
    //property Verfuebar: boolean read Verfuegbarkeit;
   // property Fehlerevent_ausloesen: TFehlerevent read Fehlerevent write Fehlerevent;
end;

// Typdeklaration für die aus der dynamisch eingebundenen MMC.DLL zu ladenen
// Funktionen.
type TMMC_COM_open = function(portnumber,bautrate: integer):integer; stdcall;
type TMMC_close = function: integer; stdcall;
type TMMC_sendCommand = function(pCmd: pChar): integer; stdcall;
type TMST_moving = function: integer; stdcall;

// Variablendeklaration der aus der dynamisch eingebundenen MMC.DLL zu ladenen
// Funktionen
var MMC_COM_open: TMMC_COM_open;
    MMC_close: TMMC_close;
    MMC_sendCommand: TMMC_sendCommand;
    MST_moving: TMST_moving;

{////////////////////////////////////////////////////////////////////////////////////}
{/                                Funktionen der DLL                                /}
{////////////////////////////////////////////////////////////////////////////////////}

{function MMC_COM_open(portnumber,baudrate:integer):integer;
            stdcall external ExtLib;
function MMC_COM_close:integer;
            stdcall external ExtLib; //
function MMC_COM_setBuffer:integer;
            stdcall external ExtLib; //
function MMC_sendString(pCmd:pChar):integer;
            stdcall external ExtLib; //
function MMC_sendCommand(pCmd:pChar):integer;
            stdcall external ExtLib; //
function MMC_getPos:integer;
            stdcall external ExtLib; //
function MDC_getPosErr:integer;
            stdcall external ExtLib; //
function MMC_getVal(query:integer):integer;
            stdcall external ExtLib; //
function MMC_getReport(pCmd,psRead:PChar):integer;
            stdcall external ExtLib; //
function MMC_getStringCR(psRead:PChar):integer;
            stdcall external ExtLib; //
function MDC_moving:integer;
            stdcall external ExtLib; //
function MST_moving:integer;
            stdcall external ExtLib; //
function MMC_initNetwork(maxaxis:integer):integer;
            stdcall external ExtLib; //
function MMC_select(newaxis:integer):integer;
            stdcall external ExtLib; //
function MMC_setDevice(newaxis:integer):integer;
            stdcall external ExtLib; //
function MMC_COM_clear:integer;
            stdcall external ExtLib; //
function MMC_COM_EOF:integer;
            stdcall external ExtLib; //
function MMC_getSTB(byteno:integer):integer;
            stdcall external ExtLib; //
function MDC_waitStop:integer;
            stdcall external ExtLib; //
function MST_waitStop:integer;
            stdcall external ExtLib; //
function MMC_getDLLversion:integer;
            stdcall external ExtLib;
function MMC_moveA(axis,position:integer):integer;
            stdcall external ExtLib;
function MMC_moveR(axis,shift:integer):integer;
            stdcall external ExtLib;
function MMC_getMacro(macno:integer;content:PChar):integer;
            stdcall external ExtLib;
function MMC_globalBreak:integer;
            stdcall external ExtLib;         }


{////////////////////////////////////Ende Funktionen//////////////////////////////////}


implementation

constructor TV_Tische.create;
begin
  inherited create; // <--- in jeder Zeile des Constructors tritt ein Fehler auf, sogar wenn alles bis zum end; auskommentiert wird tritt bei dem end; die Exception auf
  bBewegung := false;
  bkalibriert := false;
  bAngeschlossen := false;
  Bewegungsueberwachung := TTimer.Create(nil);
  DLLFunktionen_laden;
  //if assigned(Fehlerevent) then Fehlerevent(1);
  
end;

function TV_Tische.Verfuegbarkeit: boolean;
begin

end;

destructor TV_Tische.Destroy;
begin
  {TischDLL.Destroy;
  Bremsen;
  MMC_COM_close;
  inherited Destroy; }

end;
end.
hier die Hauptfunktion

Delphi-Quellcode:


unit ThreadUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ComCtrls, VT_Funktionen, Hilfsfunktionen;

type TAnschlussElement = record
  Komponentenhandle: THandle;
  sIdent: string;
  iComSchnittstelle: integer;
  bAngeschlossen, bDLL: boolean;
end;

type
  THUnterthread = class(TThread)
    private
      ComPort_VT: integer;
      aComport: array of integer;
      procedure Fehler_verifizieren(iFehlercode: integer);
    protected
      procedure Execute; override;
    public
      iThreadmsg: integer;
      AnschlussElement: array of TAnschlussElement;
      constructor create;
      destructor Destroy; override;
    end;

var V_Tische: TV_Tische;

implementation

uses LoaderUnit;

constructor THUnterthread.create;
begin
  inherited create(false);
  iThreadmsg := 1;
end;

procedure THUnterthread.Execute;
begin
  V_Tische.create;
  //V_Tische.Fehlerevent_ausloesen := Fehler_verifizieren;
end;

destructor THUnterthread.Destroy;
begin
  try
    V_Tische.Free
  except

  end;
  inherited Destroy;
end;

procedure THUnterthread.Fehler_verifizieren(iFehlercode: integer);
begin
  iThreadmsg := 16;
end;
Vielen Dank
BAMatze
  Mit Zitat antworten Zitat