gpt4 book ai didi

COM:使用 VT_BSTR 值创建 VT_ARRAY

转载 作者:行者123 更新时间:2023-12-03 23:11:28 28 4
gpt4 key购买 nike

我是 COM 新手,我认为我所拥有的是正确的,但运行时不喜欢它。非常感谢任何帮助。

我需要调用一个接受 BSTR 的一维数组的 COM 函数。具体来说,文档说参数必须是:

Function: AddFiles ( [in] VARIANT * filePaths )

filePaths The single-dimensioned array of full paths to each file or folder. filePaths can be of type VT_ARRAY|VT_VARIANT, where each entry is a VT_BSTR, or VT_ARRAY|VT_BSTR.

我有一个 vector<wstring> myPaths我想传递给采用上述参数的函数的路径。这是我写的代码。在 myComObject 上调用 AddFiles 会产生一个 AV(myComObject 不为空,我可以在其上调用其他方法):

        ...
VARIANT filePaths;
VariantInit( &filePaths );
filePaths.vt = VT_ARRAY|VT_VARIANT;
filePaths.parray = SafeArrayCreateVector( VT_BSTR, 0, (unsigned int) myPaths.size() );

long i = 0;
for( vector<wstring>::iterator it = myPaths.begin();
it != myPaths.end();
it++, i++ )
{
BSTR myPath= SysAllocString(it->c_str());
SafeArrayPutElement( filePaths.parray, &i, myPath);
}

myComObject->AddFiles( &filePaths );
...

COM 对象不是我的代码,我无法对其进行调试,但我怀疑我没有正确创建该数组 - 根据 AddFiles 函数的要求和我拥有的代码,任何人都有想法我可能做错了什么?

最佳答案

如果 myComObject->AddFiles 只能处理 VT_ARRAY|VT_VARIANT,则以下内容也应该有效。

VARIANT myPath;
VariantInit(&myPath);

myPath.vt = VT_BSTR;
myPath.bstrVal = SysAllocString(it->c_str());

SafeArrayPutElement(filePaths.parray, &i, &myPath);

关于COM:使用 VT_BSTR 值创建 VT_ARRAY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1456400/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com