Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   USB Display - API Problem (Fehler bei Kompilierung) (https://www.delphipraxis.net/170131-usb-display-api-problem-fehler-bei-kompilierung.html)

delphihase 2. Sep 2012 16:24

Delphi-Version: XE

USB Display - API Problem (Fehler bei Kompilierung)
 
Hi,

habe mir jetzt mal ein ABACOM USB-LCD-Display für 4x20 Zeichen ASCII zugelegt. Funktioniert mit dem Demoprogramm einwandfrei, nur klappt das mit nem eigenen Projekt nicht so wie ich will.

Vorab: Die API gibts unter http://www.abacom-online.de/div/setup-usb-lcd.exe , die Anleitung dazu unter http://www.abacom-online.de/div/ABACOM_USB_LCD.pdf .

Das Sample Projekt für Delphi 5 funktioniert gut, ich kann es modifizieren und so das Display ansteuern. Nur das Problem ist, dass ich jetzt diese Unit in ein anderes Projekt einbauen will. Beim kompilieren kommt mir dann der Fehler:

ABACOM_USB_LCD_TLB.pas(497): E2064 Der linken Seite kann nichts zugewiesen werden

Die Zeile 497:
Delphi-Quellcode:
  TControlData2(CControlData).FirstEventOfs := Cardinal(@@FOnActivate) - Cardinal(Self);

Ich hoffe, es kann mir jemand helfen.

Danke im Voraus!

himitsu 2. Sep 2012 16:45

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Was ist FirstEventOfs? ( ein Property? )

Die Setup lad ich mir jetzt nicht runter ... wäre ja zu paraktisch, wenn es die PAS pur gäbe.

delphihase 3. Sep 2012 10:45

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich dachte, 628 Zeilen Quellcode sind zu viel ...

Hmm, die CControlData ist ein Typ von TControlData2, definiert in OleCtrls ...

Die ganze Funktion:

Delphi-Quellcode:
procedure TUSBLCDX.InitControlData;
const
  CEventDispIDs: array [0..9] of DWORD = (
    $000000C9, $000000CA, $000000CB, $000000CC, $000000CD, $000000CE,
    $000000CF, $000000D0, $000000D1, $000000D2);
  CTFontIDs: array [0..0] of DWORD = (
    $FFFFFE00);
  CControlData: TControlData2 = (
    ClassID: '{32F7D76C-7571-4142-8C35-A78F5CCE120D}';
    EventIID: '{CCA105D4-0627-49C3-8181-D097ED4B5A30}';
    EventCount: 10;
    EventDispIDs: @CEventDispIDs;
    LicenseKey: nil (*HR:$00000000*);
    Flags: $0000001D;
    Version: 401;
    FontCount: 1;
    FontIDs: @CTFontIDs);
begin
  ControlData := @CControlData;
  TControlData2(CControlData).FirstEventOfs := Cardinal(@@FOnActivate) - Cardinal(Self);
end;
Im Anhang das Sample-Projekt für Delphi 5.

Mein Vorgehen für das neue Projekt:
VCL-Anwendung erstellt
ABACOM_USB_LCD_TLB.pas hinzugefügt und in die includes
die Includes des Sample Projects, welche bei mir nicht vorhanden waren, auch inkludiert

Soll ich sonst noch was uploaden?

hathor 3. Sep 2012 11:19

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Bei mir gibt es den Fehler: Klasse nicht registriert.

OCX fehlt - ActiveX ?

delphihase 3. Sep 2012 11:37

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Hat mich zwar auch gewundert, aber auch in der lauffähigen Version ist dieses @@ drin ...

Das Entfernen von einem @ ändert allerdings nichts an dem Fehler. :cry:

hathor 3. Sep 2012 11:48

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
So OCX ist geladen und registriert.

Sowohl Original-EXE als auch selbstcompilierte EXE sind fehlerfrei.

DELPHI 2009

delphihase 3. Sep 2012 12:11

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Sorry, aber was muss ich tun, um diese OCX zu registrieren?

Von OCX noch nie was gehört und Google sagt auch nur was von ActiveX, und damit habe ich noch nie gearbeitet.

hathor 3. Sep 2012 12:50

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Das macht das setup_usb_lcd.exe automatisch.
Vor dem 1. Test hatte ich das Setup noch nicht ausgeführt.

delphihase 3. Sep 2012 13:08

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Diese Setup-Datei habe ich ja installiert !?!

Also habe ich jetzt deinstalliert, nochmal installiert - gleicher Fehler ...

Welche Dateien hast du bei deinem neuen Projekt alle drin? (Kannst du das vielleicht als zip hochladen, evtl. kann er das ja kompilieren ...)

DeddyH 3. Sep 2012 13:24

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Musst Du die *.ocx evtl. noch in Delphi installieren (Komponente - Komponente importieren)?

hathor 3. Sep 2012 13:29

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Nein, ABACOM_USB_LCD_TLB.pas ist dabei.

DeddyH 3. Sep 2012 13:30

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Sry, hatte ich übersehen.

hathor 3. Sep 2012 13:32

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Zitat:

Zitat von delphihase (Beitrag 1181239)
...Welche Dateien hast du bei deinem neuen Projekt alle drin? (Kannst du das vielleicht als zip hochladen, evtl. kann er das ja kompilieren ...)

Ich habe kein neues Project - ich habe nur Borland Delphi 5.0 compiliert.

Was verstehst Du unter "Includes"?

Der Fehler liegt nicht im ABACOM_USB_LCD_TLB.pas, da wird er nur gemeldet...
Zeige uns mal das neue Project von Dir.

delphihase 3. Sep 2012 13:33

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Das geht ja bei mir auch ... ;)

Nur das integrieren in eine neue, leere VCL-Formularanwendung klappt nicht.

EDIT:

Meinte mit den "Includes" die uses.

Mein Projekt anbei.

EDIT2: Anhang entfernt, war die falsche ZIP ... -.-

hathor 3. Sep 2012 13:44

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Ein neues Project muss doch nur uses ABACOM_USB_LCD_TLB, die Private-Declarations haben und die Formcreate-Procedure - mehr ist da nicht.

Da kann man doch nicht soviel falsch machen!

delphihase 3. Sep 2012 13:48

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Zitat:

Zitat von hathor (Beitrag 1181256)
Da kann man doch nicht soviel falsch machen!

Dachte ich auch ... -.-

Mein Code in der main.pas:

Delphi-Quellcode:
unit main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ABACOM_USB_LCD_TLB;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    LCD: TUSBLCDX;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
   LCD := TUSBLCDX.Create(self);
   With LCD do
   begin
      parent := self;
      Left := 24;
      Top := 32;
   end;
end;

end.
Hast du ne Idee, was daran falsch ist?

Bei den Includes gibts folgende weniger als bei der Original-DPR:

Delphi-Quellcode:
ComCtrls, StdCtrls
Diese hinzuzufügen bringt aber auch nichts ...

hathor 3. Sep 2012 13:51

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
uses ist nicht identisch:
Es fehlen:
ABACOM_USB_LCD_TLB, ComCtrls, StdCtrls;
----------
Du arbeitest offensichtlich mit verschiedenen Projects!
Dein Upload sieht anders aus!!!

delphihase 3. Sep 2012 13:56

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Zitat:

Zitat von delphihase (Beitrag 1181250)
EDIT2: Anhang entfernt, war die falsche ZIP ... -.-

Stimmt, ich hatte mich beim Upload vertan ... Sorry ... Aber, BTW, hat die falsche Version sich bei dir kompilieren lassen? Bei mir nicht ...

Der jetzige Quellcode ist das neue Projekt - soll ich das uppen?

hathor 3. Sep 2012 14:03

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Der Fehler ist reproduzierbar:

Wenn ABACOM_USB_LCD_TLB NICHT im Main.pas unter uses steht, kommt der Fehler!

.
Im DPR-File ist er überflüssig.

delphihase 3. Sep 2012 14:30

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Ja, er ist ja in der main.pas, habe mich mal wieder falsch ausgedrückt -.- :duck:

Allerdings verzweifle ich langsam, denn ich habe alle uses drin ...

Kannst du vielleicht mal testen, ob du ein neues DPR erstellen kannst und dann auch kompilieren kannst?

Wenn ja, kannst du es ja mal uppen ...

Danke im Voraus, und danke für das was du schon gemacht hast!

hathor 3. Sep 2012 15:06

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nimm einfach nur das DCU-File - es muss nicht immer neu erzeugt werden.
Bei mir kommt der Fehler plötzlich auch...

himitsu 3. Sep 2012 15:30

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Achso, das ist nur eine automatisch generierte OCX.
Dachte schon, da wäre mehr Code dahinter.

Delphi-Quellcode:
// statt dem
TControlData2(CControlData).FirstEventOfs := Cardinal(@@FOnActivate) - Cardinal(Self);

// kann man notfalls auch Folgendes verwenden
TControlData2(CControlData).FirstEventOfs := Cardinal(@TMethod(FOnActivate).Code) - Cardinal(Self);
(für Win64 ist dieses Cardinal aber natürlich nicht nutzbar ... also besser sowas wie NativeUInt verwenden, wenn verfügbar)

delphihase 3. Sep 2012 15:37

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
@ himitsu
Beim ganz gewöhnlichen Windows XP funzt es nicht, nichtmal kompilieren: E 2064 ...

@ hathor
Danke, hat geklappt! Auch wenns nicht sehr, ähem, "professional" ist, thx!

himitsu 3. Sep 2012 15:55

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Wenn es sich nicht kompilieren läßt, dann liegt es wohl weniger am verwendeten Windows, sondern mehr am Compiler.

hathor 3. Sep 2012 15:59

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Das Verrückteste ist: manchmal geht es! Das sieht man am Datum der DCU.

hoika 3. Sep 2012 19:53

AW: USB Display - API Problem (Fehler bei Kompilierung)
 
Hallo,

Schau dir bei beiden Projekten mal
Die eingestellten Compiler-Optionen an.

Irgendwas mit Zuweisung an typisierte Variablen

Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz