Heb*_*Heb 8 delphi bstr c++builder safearray
我的工作与功能的COM对象库,它返回一个VARIANT带有SAFEARRAY的BSTR秒.如何显示此VARIANT实例的值并将其保存在TStringList?我试着在网上搜索没有明确的答案.
我尝试了以下但没有成功:
Variant V;
String mystr;
VarClear(V);
TVarData(V).VType = varOleStr;
V = ComFunction->GetValues(); //<<<<----- V is empty
mystr = (wchar_t *)(TVarData(V).VString);
Memo1->Lines->Add(mystr);
VarClear(V);
Run Code Online (Sandbox Code Playgroud)
您可以使用TWideStringDynArray并让 Delphi 进行转换:
procedure LoadStringsFromVariant(const Values: TWideStringDynArray; Strings: TStrings);
var
I: Integer;
begin
Strings.BeginUpdate;
try
for I := Low(Values) to High(Values) do
Strings.Add(Values[I]);
finally
Strings.EndUpdate;
end;
end;
Run Code Online (Sandbox Code Playgroud)
当您使用 BSTR 的 Variant safearray 调用此函数时,它将自动转换为TWideStringDynArray。不兼容的变体将导致运行时错误EVariantInvalidArgError。
要检查 Variant 是否拥有 BSTR 的安全数组,您可以执行以下操作:
IsOK := VarIsArray(V) and (VarArrayDimCount(V) = 1) and (VarType(V) and varTypeMask = varOleStr);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5761 次 |
| 最近记录: |