COM Problem mit auto generierten Wrapper

Antworten
hotzenplotz
Beiträge: 33
Registriert: So 13. Dez 2009, 16:17

COM Problem mit auto generierten Wrapper

Beitrag von hotzenplotz »

Ich hab da ein richtig fieses Problem mit meinen Test-Projekten. Es handelt sich dabei um eine automatisch generierte wrapper Datei, die ich von Delphi generieren habe lassen und nach Lazarus portiert habe. Viele Dinge funktionieren, andere sind zum Haare raufen! Leider ist der Wrapper ziemlicher Schrott und ich frage mich ob nur Borland damals so gepfuscht hatte oder ob es mit ObjectPascal generell solche Probleme gibt. Seit ca. 1. Woche ärgere ich mich mit einer function namens CalcBoundingBox herum. Ich hoffe jemand hat guten Rat für mich. Quelltext vom Test-Projekt:

Code: Alles auswählen

procedure TForm1.btnBerechnenClick(Sender: TObject);
begin
     pIGraphic:= TCApp.ActiveDrawing.Graphics_; //pIGraphic ist ein Graphic Objekt
     BBox:= pIGraphic.CalcBoundingBox(VarDummy); //BBox ist ein BoundingBox Objekt, VarDummy ist OLEVariant - Hier ist der Fehler irgendwo!
     //ShowMessage(FloatToStr(BBox.Min.X));
end;


In VisualBasic brauch ich keinen zusätzlichen OLEVariant. Mich wundert es, dass ObjectPascal dieses voraussetzt.
In VisualBasic funktioniert das auch ohne Probleme. Das muss doch mit Lazarus auch zu lösen sein!

Die entsprechende Zeile im Wrapper:

Code: Alles auswählen

function CalcBoundingBox(var Transform: OleVariant): BoundingBox; safecall;


Ich kann mir nicht erklären warum es nicht funktioniert. Es kompiliert auch anstandslos! Aber nach der Ausführung des Code Abschnittes, bekomme ich diese Fehlermeldung:

Projekt xxx hat Exception-Klasse 'EOleException' ausgelöst mit der Meldung: Falscher Parameter.
Mischen Sie Sich ein! Machen Sie mit! ödp www.ödp.de - Die Öko-Demokraten

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: COM Problem mit auto generierten Wrapper

Beitrag von pluto »

Ich würde darauf Tippen, dass es noch Probleme mit dem "OleVariant" gibt. Hast du mal im Bug-Tracker gesucht ? Anderen Seits ist es ein Var-Parameter. Kann sein das der erst mit einem Wert Belegt werden muss.
MFG
Michael Springwald

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: COM Problem mit auto generierten Wrapper

Beitrag von marcov »

Ja, das VAR sein des Parameters ist verdacht.

btw, Paul hat COM handleexception und safecall sind _heute_ in trunk gefixed.

Das ist noch immer nicht 100% Delphi compatible (Delphi verwendet SEH, FPC nicht), aber es schon wieder ein bisschen besser

hotzenplotz
Beiträge: 33
Registriert: So 13. Dez 2009, 16:17

Re: COM Problem mit auto generierten Wrapper

Beitrag von hotzenplotz »

Danke erstmal ihr beiden! Jetzt hab ich aber ein Problem mit dem trunk kompilieren...
Siehe meinen anderen Thread viewtopic.php?f=10&t=3305&p=36129#p36129
Mischen Sie Sich ein! Machen Sie mit! ödp www.ödp.de - Die Öko-Demokraten

hotzenplotz
Beiträge: 33
Registriert: So 13. Dez 2009, 16:17

Re: COM Problem mit auto generierten Wrapper

Beitrag von hotzenplotz »

Jetzt hab ich solange damit rumgespielt den aktuellsten Compiler und den aktuellsten Lazarus zu bekommen. Und bekomme immer noch die selbe Fehlermeldung :lol:
Zumindest war es einen Versuch wert. Evtl. stimmt ja doch mein QT nicht. "Falscher Parameter"... Ich muss da nochmals nachforschen ;)
Mischen Sie Sich ein! Machen Sie mit! ödp www.ödp.de - Die Öko-Demokraten

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: COM Problem mit auto generierten Wrapper

Beitrag von marcov »

hotzenplotz hat geschrieben:Jetzt hab ich solange damit rumgespielt den aktuellsten Compiler und den aktuellsten Lazarus zu bekommen. Und bekomme immer noch die selbe Fehlermeldung :lol:
Zumindest war es einen Versuch wert. Evtl. stimmt ja doch mein QT nicht. "Falscher Parameter"... Ich muss da nochmals nachforschen ;)


Sie haben _ohne_ var versucht?

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: COM Problem mit auto generierten Wrapper

Beitrag von pluto »

Sie haben _ohne_ var versucht?

Du meinst das könnte zu so einem Fehler führen ?

@hotzenplotz Ist denn in der Version in der es geht ebenfalls ein Var erforderlich bzw. was ähnliches ?
(ich gehe mal davon aus, du kennst du Bedeutung davon)
MFG
Michael Springwald

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: COM Problem mit auto generierten Wrapper

Beitrag von marcov »

pluto hat geschrieben:
Sie haben _ohne_ var versucht?

Du meinst das könnte zu so einem Fehler führen ?


Natürlich. Das ist eine extra Indirektion.

@hotzenplotz Ist denn in der Version in der es geht ebenfalls ein Var erforderlich bzw. was ähnliches ?
(ich gehe mal davon aus, du kennst du Bedeutung davon)


(Sprechworten sind zu schwierig aufs Deutsch: "Assumptions are the mother of all screwups")

hotzenplotz
Beiträge: 33
Registriert: So 13. Dez 2009, 16:17

Re: COM Problem mit auto generierten Wrapper

Beitrag von hotzenplotz »

Ohne den OleVariant habe ich es natürlich auch versucht. Das bringt folgende Fehlermeldung:

Code: Alles auswählen

unit1.pas(73,22) Error: Incompatible types: got "Graphics.CalcBoundingBox(var OleVariant):BoundingBox; SafeCall;" expected "BoundingBox"

Laut Dokumentation von TurboCAD SDK muss nicht unbedingt ein Parameter mit angegeben werden. Aber der Wrapper bzw. ObjectPascal setzt den OleVariant voraus.

Wie gesagt: VisualBasic.net will diese Variable nicht haben! Hier ist etwas faul...

Mit dem neuen Lazarus bekomme ich eine bessere Fehlermeldung. Ich werde daraus aber nicht wirklich schlau! Siehe Screenshot.

Bild
Mischen Sie Sich ein! Machen Sie mit! ödp www.ödp.de - Die Öko-Demokraten

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: COM Problem mit auto generierten Wrapper

Beitrag von marcov »

hotzenplotz hat geschrieben:Ohne den OleVariant habe ich es natürlich auch versucht. Das bringt folgende Fehlermeldung:

Code: Alles auswählen

unit1.pas(73,22) Error: Incompatible types: got "Graphics.CalcBoundingBox(var OleVariant):BoundingBox; SafeCall;" expected "BoundingBox"

Laut Dokumentation von TurboCAD SDK muss nicht unbedingt ein Parameter mit angegeben werden. Aber der Wrapper bzw. ObjectPascal setzt den OleVariant voraus.

Und alles ist kompiliert in Delphi modus? Hoert sich an als OBJFPC.

Wie gesagt: VisualBasic.net will diese Variable nicht haben! Hier ist etwas faul...


Das versteh ich nicht. Wie welcher Variabele mag VB.NET und woran liest du dies ab?

Mit dem neuen Lazarus bekomme ich eine bessere Fehlermeldung. Ich werde daraus aber nicht wirklich schlau! Siehe Screenshot.
[/quote]

Hoert sich an als etwas das TC generiert.

hotzenplotz
Beiträge: 33
Registriert: So 13. Dez 2009, 16:17

Re: COM Problem mit auto generierten Wrapper

Beitrag von hotzenplotz »

marcov hat geschrieben:
hotzenplotz hat geschrieben:Ohne den OleVariant habe ich es natürlich auch versucht. Das bringt folgende Fehlermeldung:

Code: Alles auswählen

unit1.pas(73,22) Error: Incompatible types: got "Graphics.CalcBoundingBox(var OleVariant):BoundingBox; SafeCall;" expected "BoundingBox"

Laut Dokumentation von TurboCAD SDK muss nicht unbedingt ein Parameter mit angegeben werden. Aber der Wrapper bzw. ObjectPascal setzt den OleVariant voraus.

Und alles ist kompiliert in Delphi modus? Hoert sich an als OBJFPC.

Wie gesagt: VisualBasic.net will diese Variable nicht haben! Hier ist etwas faul...


Das versteh ich nicht. Wie welcher Variabele mag VB.NET und woran liest du dies ab?

Mit dem neuen Lazarus bekomme ich eine bessere Fehlermeldung. Ich werde daraus aber nicht wirklich schlau! Siehe Screenshot.


Hoert sich an als etwas das TC generiert.[/quote]

Nein. Ist Delphi Modus: {$MODE DELPHI}{$H+}

VisualBasic will diese OleVariant Variable nicht haben. VisualBasic kompiliert ohne Probleme, wenn ich diese Variable nicht übergebe.

Du denkst die Fehlermeldung würde TurboCAD generieren? Wie meinst du das? Die Exception wird geworfen, wenn ich das Ereignis ausführe in dem der
fragliche Code abschnitt liegt.
Mischen Sie Sich ein! Machen Sie mit! ödp www.ödp.de - Die Öko-Demokraten

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: COM Problem mit auto generierten Wrapper

Beitrag von marcov »

hotzenplotz hat geschrieben: VisualBasic will diese OleVariant Variable nicht haben. VisualBasic kompiliert ohne Probleme, wenn ich diese Variable nicht übergebe.

Du denkst die Fehlermeldung würde TurboCAD generieren? Wie meinst du das? Die Exception wird geworfen, wenn ich das Ereignis ausführe in dem der
fragliche Code abschnitt liegt.


Ich verstehe das ganze nicht mehr. Ich nahm an dass TurboCAD in VB.net programmiert ist.

hotzenplotz
Beiträge: 33
Registriert: So 13. Dez 2009, 16:17

Re: COM Problem mit auto generierten Wrapper

Beitrag von hotzenplotz »

marcov hat geschrieben:
hotzenplotz hat geschrieben: VisualBasic will diese OleVariant Variable nicht haben. VisualBasic kompiliert ohne Probleme, wenn ich diese Variable nicht übergebe.

Du denkst die Fehlermeldung würde TurboCAD generieren? Wie meinst du das? Die Exception wird geworfen, wenn ich das Ereignis ausführe in dem der
fragliche Code abschnitt liegt.


Ich verstehe das ganze nicht mehr. Ich nahm an dass TurboCAD in VB.net programmiert ist.


Nein. Ich nehme an es ist mit Visual C++ geschrieben. Ich habe versucht auf die COM Schnittstelle auch mit VB.NET zu zugreifen. Damit funktioniert das ohne Fehlermeldungen.
Aber ich möchte natürlich lieber mit Lazarus programmieren :)
Mischen Sie Sich ein! Machen Sie mit! ödp www.ödp.de - Die Öko-Demokraten

Antworten