SafeArrayCreate in ActiveX-Unit?

Antworten
ErnstVolker
Beiträge: 336
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

SafeArrayCreate in ActiveX-Unit?

Beitrag von ErnstVolker »

Hallo zusammen,

ich setzte momentan ein Delphi Project in Lazarus um. In einer Unit wird unter "uses" ActiveX verwendet.
Es finden dann "SafeArrayCreate" und "SafePutElement" Verwendung. In Delphi7 kein Problem.
Bei Lazarus kommt die Meldung: "Identifier not found".
Wie heißen die entsprechenden Lazarus-Anweisungen?

Vielen Dank

Gruß

Volker

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: SafeArrayCreate in ActiveX-Unit?

Beitrag von marcov »

ErnstVolker hat geschrieben:Hallo zusammen,

ich setzte momentan ein Delphi Project in Lazarus um. In einer Unit wird unter "uses" ActiveX verwendet.
Es finden dann "SafeArrayCreate" und "SafePutElement" Verwendung. In Delphi7 kein Problem.
Bei Lazarus kommt die Meldung: "Identifier not found".
Wie heißen die entsprechenden Lazarus-Anweisungen?


Safearraycreate ist in Varutils. SafePutElement kenne ich nicht, aber SafeArrayPutElement ist auch dort drin.

Kann sein das es in neueren Delphi's auch nach Varutils verschoben ist.

ErnstVolker
Beiträge: 336
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: SafeArrayCreate in ActiveX-Unit?

Beitrag von ErnstVolker »

Hallo marcov,

danke für den Tipp.
Aber jetzt gibt es ein neues Problem. Die Funktion SafeArrayCreate liefert als Rückgabe PVarArray.
Ich brauche aber PSafeArray.
Wie löse ich das Problem?

Ich habe auch mal im Lazarus-wiki nach dem Befehl SafeArrayCreate gesucht. Ich fand aber keinen Hinweis wo der Befehl steckt.

Gruß

Volker

ErnstVolker
Beiträge: 336
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: SafeArrayCreate in ActiveX-Unit?

Beitrag von ErnstVolker »

Schade, daß keiner eine Idee zu SafeArrayCreate hat.
Ist die ActiveX-unit fehlerhaft?

Volker

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: SafeArrayCreate in ActiveX-Unit?

Beitrag von marcov »

ActiveX ist fehlerhaft, aber ich denke nicht das das hier das Problem ist (dass ist in mehr avancierter Funktionalität).

Ich denke das du hier mehr ein Unterschied bemerkst das auch existiert zwischen unterschiedliche Delphi Versionen.

Einfach zu PSafeArray Casten soll funktionieren.

ErnstVolker
Beiträge: 336
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: SafeArrayCreate in ActiveX-Unit?

Beitrag von ErnstVolker »

Blöde Frage, da ich nicht weiß wie das geht:

Was ist "Casten"????? Wie funktioniert das?

Tut mir leid, daß ich so blöde Frage, hab' aber momentan keine Zeit großartig zu recherchieren...

Danke

Volker

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: SafeArrayCreate in ActiveX-Unit?

Beitrag von theo »

Casten heisst, dass man dem Compiler mitteilt, dass ein Typ ein anderer ist. ;-)

Im Beispiel:

PSafeArray(SafeArrayCreate)

Hiermit betrachtet der Compiler nun der Rückgabewert nicht mehr als PVarArray sondern als PSafeArray.
Das klappt natürlich zur Laufzeit nur, wenn die Typen tatsächlich kompatibel sind. Marcov sagt, dass es so ist.

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: SafeArrayCreate in ActiveX-Unit?

Beitrag von marcov »

Nein, er hofft das nur :-)

ErnstVolker
Beiträge: 336
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: SafeArrayCreate in ActiveX-Unit?

Beitrag von ErnstVolker »

Hallo,

zu SafeArrayCreate und SafeArrayPutElement könnte ich noch ein wenig Hilfe gebrauchen.

Die Funktion SafeArrayCreate verlangt u.a. daß ihr "bounds" übergeben werden. Diese sollen vom Typ TVarArrayBoundArray sein. Mit bounds wird festgelegt ob das Array bei z.B. 0 oder 1 oder wie auch immer starten soll und wie grooß das Array ist.
Wenn ich eine Variable (Grenz) vom Typ TSafeArrayBoundArray definiere und dann im Quelltext mit Grenz. darauf zugreifen will, erscheinen im aufpoppenden Fensterchen nur Typen, keine Methoden wie Lbound oder cElements (so wie in Delphi). Wie gehe ich mit TSafeArrayBoundArray um?

Gleiches Problem mit SafeArrayPutElement hier sollen die "indices" als PVarArrayCoorArray übergeben werden? Wie mach' ich das?

Für etwas Hilfe danke ich

Gruß

Volker

ErnstVolker
Beiträge: 336
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: SafeArrayCreate in ActiveX-Unit?

Beitrag von ErnstVolker »

Sollte VarUtils fehlerhaft sein?

Irgendwie hab' ich das Gefühl, daß ich Lazarus mit meiner DesignCAD Automatisierung ausgebremst habe. Die Übernahme der Delphi-Unit funktioniert nur bedingt. Visual Basic macht da weniger Ärger. Selbst mit VB 2008 funktioniert die Übernahme der Typbibliothek und anschließend die Fernsteuerung (obwohl die Beispiele für das Alte VB6 geschrieben sind). Hier werd' ich wohl umsteigen müssen...

Volker

ErnstVolker
Beiträge: 336
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: SafeArrayCreate in ActiveX-Unit?

Beitrag von ErnstVolker »

Hallo zusammen,
ich will kein VB programmieren, also kämpfe ich weiter daran mein Delphi_7 Projekt auf Lazarus umzusetzen. Aber ich komm nicht weiter und erbitte Hilfe...

ich habe zusätzlich zu SafeArrayCreate weitere Fragen:

Wie ändere ich die Schriftfarbe eines Buttons? Im Objektinspektor unter Fonts funktioniert nicht. Unterstreichung wird angenommen, die Farbe bleibt.

Wie kann ich die Tastaturansprache eines Buttons aktivieren? Bei Delphi unter Caption vor den Buchstaben das Kaufmännische "UND" stellen (&Zeichnen bewirkt ein "Z" mit Unterstrich und man kann mit Alt-Z den Knopf bedienen).

Wie initialisiere ich Array's vom Typ "TVarArrayBoundArray" bzw. "PVarArrayCoorArray" ?

Im Buch Free Pascal 2 wird auf Seite 372 die Prozedur "VarCast" erklärt. Hierbei wird über einen LongInt VarType eingestellt. Weiter im Text wird erklärt, VarType sei eine vordefinierte VarNNN-Konstante. Leider Finde ich keine weitere Erklärung welcher LongInt zu welcher VarNNN-Konstante gehört, bzw. wa VarNNN_Konstanten sind. Wer weiß Rat?

Ich wünsche schöne Osterfeiertage

Gruß

Volker

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: SafeArrayCreate in ActiveX-Unit?

Beitrag von Euklid »

Hallo,

ErnstVolker hat geschrieben:Wie ändere ich die Schriftfarbe eines Buttons? Im Objektinspektor unter Fonts funktioniert nicht. Unterstreichung wird angenommen, die Farbe bleibt.


Die Änderung der Schriftfarbe ist unter Windows (wenn ich nicht irre) nur dann möglich, wenn das Windows-Manifest ausgeschaltet ist (Projekt --> Projekteinstellungen). Möglicherweise liegt es hieran?

Wie kann ich die Tastaturansprache eines Buttons aktivieren? Bei Delphi unter Caption vor den Buchstaben das Kaufmännische "UND" stellen (&Zeichnen bewirkt ein "Z" mit Unterstrich und man kann mit Alt-Z den Knopf bedienen).


Das funktioniert bei Lazarus genauso. Allerdings muss die Caption zur Laufzeit erstellt werden, also über Button1.Caption:='&test' - dies unterstreicht das t wie gewünscht. Ist wohl ein Bug in Lazarus, dass dies zur Designzeit nicht funktioniert - obwohl er angeblich behoben ist: http://bugs.freepascal.org/view.php?id=13056

Wie initialisiere ich Array's vom Typ "TVarArrayBoundArray" bzw. "PVarArrayCoorArray" ?


würde sagen über setlength(name,laenge), wenn name deine Variable von diesem Typ ist.

Im Buch Free Pascal 2 wird auf Seite 372 die Prozedur "VarCast" erklärt. Hierbei wird über einen LongInt VarType eingestellt. Weiter im Text wird erklärt, VarType sei eine vordefinierte VarNNN-Konstante. Leider Finde ich keine weitere Erklärung welcher LongInt zu welcher VarNNN-Konstante gehört, bzw. wa VarNNN_Konstanten sind. Wer weiß Rat?


Hier kann ich leider nicht weiterhelfen. Würde vorschlagen, diese Frage in einem separaten Thread nochmal zu stellen. Ich befürchte, dass NNN für etwas steht, das vergessen wurde, einzufügen.

Viele Grüße & ebenfalls schöne Ostern wünscht

Euklid

ErnstVolker
Beiträge: 336
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: SafeArrayCreate in ActiveX-Unit?

Beitrag von ErnstVolker »

Hallo Euklid,

leider funktioniert SetLength nicht. Der Compiler meldet Type mismatch.

Manifest ausschalten will auch nicht richtig. Zur Laufzeit einstellen muß ich noch austesten.

Erst mal Einkaufen fahren sonst wird's eng über die Feiertage...

Gruß und schöne Ostern

Volker

Antworten