AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Zugriff auf PSafeArray über Late Binding
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf PSafeArray über Late Binding

Ein Thema von Dawn87 · begonnen am 29. Apr 2011 · letzter Beitrag vom 2. Mai 2011
Antwort Antwort
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#1

Zugriff auf PSafeArray über Late Binding

  Alt 29. Apr 2011, 18:36
Hallo,

ich binde ein COM-Objekt über Late Binding (also über CreateOleObject()) ein. Dieses COM-Objekt enthält eine Funktion die ein PSafeArray zurückgibt.

Wenn ich dieses Array zwischenspeichern möchte um darauf zuzugreifen, erhalte ich den Fehler "Inkompatible Typen: PSafeArray und Variant".

Mein Code sieht folgendermaßen aus:
Delphi-Quellcode:
var
  f: PSafeArray;
begin
  f := FComObj.GetToolList;
end;
wobei FComObj vom Typ OleVariant ist und das COM-Objekt darstellt.

Hat jemand eine Idee wie ich an die Inhalte vom SafeArray komme?

Grüße
Dawn
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Zugriff auf PSafeArray über Late Binding

  Alt 29. Apr 2011, 18:40
Delphi-Quellcode:
var
  f: OleVariant;
begin
  f := FComObj.GetToolList;
end;
Markus Kinzler
  Mit Zitat antworten Zitat
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#3

AW: Zugriff auf PSafeArray über Late Binding

  Alt 29. Apr 2011, 18:43
Hallo,

erst einmal vielen Dank für deine Antwort.

Was ich vielleicht noch erwähnen sollte:

Ich möchte u. A. mit SafeArrayGetElement() auf die Inhalte des Arrays zugreifen. Diese Funktion erwartet eine Variable vom Typ PSafeArray. Wenn ich nun das Array in einem OleVariant unterbringe, fehlt noch eine Typenkonvertierung. Daran scheiter ich gerade.

Hast Du vielleicht noch einen Tipp?

Grüße
Dawn
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Zugriff auf PSafeArray über Late Binding

  Alt 29. Apr 2011, 18:50
Funktioniert ein Cast
  f := PSafeArray(FComObj.GetToolList); ?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Zugriff auf PSafeArray über Late Binding

  Alt 29. Apr 2011, 18:50
ich habe keine Ahnung von Deinem Comobj, etwas in der Art

FComObj.GetToolList.SafeArrayGetElement()

oder

SafeArrayGetElement(FComObj.GetToolList,xxx)

geht nicht ?

PSafeArray klingt nach Pointer ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#6

AW: Zugriff auf PSafeArray über Late Binding

  Alt 2. Mai 2011, 09:49
Lösung:

Folgende Funktion schafft Abhilfe:

Delphi-Quellcode:
function VariantToSafeArray(const Arr: OleVariant): PSafeArray;
begin
    Assert(TVarData(Arr).VType=varArray);

    Result:=PSafeArray(TVarData(Arr).VArray);
end;
Gefunden auf:
http://www.experts-exchange.com/Prog..._20178900.html
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.048 Beiträge
 
Delphi 12 Athens
 
#7

AW: Zugriff auf PSafeArray über Late Binding

  Alt 2. Mai 2011, 10:50
Besser noch Delphi-Referenz durchsuchenVarArrayAsPSafeArray, gefunden in der Unit Variants.

Oder Delphi-Referenz durchsuchenSafeArrayGetElement und Co. (Unit VarUtils und sie fangen alle mit SafeArray... an)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz