8
votes

Comment afficher les valeurs d'une variante avec un safearray de BSTRS

Je travaille sur une bibliothèque d'objet COM avec fonction qui renvoie une variante avec un Safearray de BSTR s. Comment puis-je afficher les valeurs de cette instance variante et enregistrez-la dans un TStringList ? J'ai essayé de chercher sur le net sans réponse claire.

J'ai essayé ce qui suit sans succès: xxx


0 commentaires

3 Réponses :


4
votes

Vous pouvez utiliser twidestringdynarray code> et laisser Delphi faire la conversion: xxx pré>

Lorsque vous appelez ceci avec votre variante Safearray de BSTRS, il sera converti en TwidestringDynarray code> automatiquement. Une variante incompatible provoquera l'erreur d'exécution evaritinvalidargerror code>. P>

Pour vérifier si une variante contient un tableau sécurisé de BSTR Vous pouvez le faire: P>

IsOK := VarIsArray(V) and (VarArrayDimCount(V) = 1) and (VarType(V) and varTypeMask = varOleStr);


0 commentaires

4
votes
var
  v: Variant;
v := ComFunction.GetValues;
for i := VarArrayLowBound(v, 1) to VarArrayHighBound(v, 1) do
begin 
  W := VarArrayGet(v, [i]);
  Memo1.Lines.Add (W);
end;

0 commentaires

2
votes

Comment puis-je afficher les valeurs de cette instance de variante et l'enregistrer dans une TStringList? strong> p>

Le com variante code> struct a parray code> et PPARRAY code> membres de données qui sont des pointeurs à un Safearray code>, par exemple: p> xxx pré>

la variante VCL code> La classe code>, d'autre part, a un opérateur de conversion code> lpsafarray code> défini, de sorte que vous pouvez attribuer il est directement (mais seulement si le champ variante.vtype code> qui ne possède pas le drapeau du code code> varbyref code> présent, c'est-à-dire), par exemple: p> xxx pré >

de toute façon, une fois que vous avez le pointeur code> Safearray CODE>, utilisez l'API de SafeArray pour accéder aux valeurs BSTR code> BSTR, par exemple: p>

String mystr = V;


0 commentaires