首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >COM:创建一个具有VT_ARRAY值的VT_BSTR

COM:创建一个具有VT_ARRAY值的VT_BSTR
EN

Stack Overflow用户
提问于 2009-09-21 19:34:10
回答 2查看 11.5K关注 0票数 3

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

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

函数: AddFiles (在变量* filePaths中)

filePaths每个文件或文件夹的全路径的单维数组.filePaths可以是VT_ARRAY|VT_VARIANT类型,其中每个条目都是VT_BSTRVT_ARRAY|VT_BSTR

我有一个路径的vector<wstring> myPaths,我想把它传递到接受上面参数的函数中。这是我写的代码。在AddFiles上调用myComObject会导致AV (myComObject不是null,我可以在它上调用其他方法):

代码语言:javascript
复制
        ...
        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函数的要求和我所拥有的代码,有人知道我可能做错了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-21 22:43:40

如果myComObject->AddFiles只能处理VT_ARRAY|VT_VARIANT,下面的操作也应该有效。

代码语言:javascript
复制
VARIANT myPath;
VariantInit(&myPath);

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

SafeArrayPutElement(filePaths.parray, &i, &myPath);
票数 3
EN

Stack Overflow用户

发布于 2009-09-21 21:37:01

你不想:

代码语言:javascript
复制
filePaths.vt = VT_ARRAY|VT_BSTR;

既然你正在创建一个BSTR的SafeArray?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1456400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档