Je travaille sur une bibliothèque d'objet COM avec fonction qui renvoie une variante code> avec un J'ai essayé ce qui suit sans succès: p> Safearray code> de
BSTR code> s. Comment puis-je afficher les valeurs de cette instance code> variante code> et enregistrez-la dans un
TStringList code>? J'ai essayé de chercher sur le net sans réponse claire.
3 Réponses :
Vous pouvez utiliser Lorsque vous appelez ceci avec votre variante Safearray de BSTRS, il sera converti en Pour vérifier si une variante contient un tableau sécurisé de BSTR Vous pouvez le faire: P> twidestringdynarray code> et laisser Delphi faire la conversion:
TwidestringDynarray code> automatiquement. Une variante incompatible provoquera l'erreur d'exécution
evaritinvalidargerror code>. P>
IsOK := VarIsArray(V) and (VarArrayDimCount(V) = 1) and (VarType(V) and varTypeMask = varOleStr);
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;
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;