Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   Free Pascal Syntax (https://www.delphipraxis.net/176795-free-pascal-syntax.html)

Berni68 26. Sep 2013 18:49


Free Pascal Syntax
 
Hallo zusammen,

ich habe mit der LazActiveX Komponente eine .tlb importiert.
Es wird z.B. folgender Code generiert

Delphi-Quellcode:
 function GetBSplineInfo(pnOrder:array[0..1] of LongWord;pnNumPoles:array[0..1] of LongWord;pnNumKnots:array[0..1] of LongWord;out pbIsRational:ShortInt;pbIsPeriodic:TArrayShortInt01;pbIsClosed:TArrayShortInt01;out pbIsPlanar:ShortInt;pPlaneVector:TPoint02):HRESULT;stdcall;

das läßt sich aber nicht kompilieren Fehler:
L:\Inventor\Inventor_1_0_TLB.pas(34766,41) Fatal: Syntax error, "OF" expected but "[" found

Das Problem kann man zwar umgehen idem man
Delphi-Quellcode:
type
  TpnOrder = array[0..1] of LongWord;
deklariert, und dann TpnOrder in der Funktion übergibt.

Das unangenehme aber ist, daß in dieser Bib zahllose solcher (verschiedener) arrays verwendet werden die dann alle händisch ersetzt werden müssten.
Meine Hoffnung ist aber, das LazActiveX syntaktisch korrekten Code generiert, und ich lediglich einen Compilerschalter richtig setzen muß.
Lieg ich da richtig, und vor allem wo find ich den Haken?

JamesTKirk 28. Sep 2013 09:47

AW: Free Pascal Syntax
 
Die Syntax
Delphi-Quellcode:
array[x..y] of Something
wird bei Parametern in der Tat nicht unterstützt. Das wäre also dann ein Bug im tlb-Importer. Könntest du eventuell einen Bugreport auf bugs.freepascal.org öffnen oder mir zumindest sagen bei welcher TLB das auftritt, damit es derjenige, der den Importer pflegt, beheben kann?

Edit: Die TLB ist in beiden Fällen nötig, da das Problem ja nachgestellt werden muss.

Gruß,
Sven

Berni68 2. Okt 2013 20:49

AW: Free Pascal Syntax
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Sven,

entschuldige, daß ich mich erst so spät melde.

An einen bug-report trau ich mich nicht ran, die .tlb hab ich aber angehängt.

Es gibt aber noch weitere Probleme.
Wenn ich in der automatisch erzeugten Unit folgende Typen deklariere:

Code:
Type
  TPoint02 = array[0..2] of Double;
  TPoint01 = array[0..1] of Double;
  TArrayShortInt = array[0..1] of ShortInt;
  TpCells = array[0..15] of Double;
  TpnOrder = array[0..1] of LongWord;
  TpCells = array[0..8] of Double;
  PIUnknown = IUnknown; // *1)
und im Quelltext entsprechend ersetze,läßt sich die .lpk compilieren und installieren.
Sobald aber in Lazarus ein Objekt auf einem Formular plaziert wird, stürzt Lazarus komplett ab.
Kann aber auch an *1) liegen, da habe ich besseren Wissens nur improvisiert.

Ausserdem finde ich in der Bibliothek kein Objekt namens Application.
In Delphi erhalte ich durch
Delphi-Quellcode:
InventorApp:= GetActiveOleObject('Inventor.Application') As Inventor_TLB.Application; // Inventor_TLB = PackageName
die Verbindung zum OLE-Server.
(* auch GetActiveOleObject('{xxxxxxxxxxxxxxx}') KlassenId mit ROT-Viewer geht nicht *)

Gruß
Bernhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 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