- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 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 aVT_BSTR
, orVT_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/
我是 COM 新手,我认为我所拥有的是正确的,但运行时不喜欢它。非常感谢任何帮助。 我需要调用一个接受 BSTR 的一维数组的 COM 函数。具体来说,文档说参数必须是: Function: AddF
我想使用具有 COM 对象接口(interface)的仪器。不幸的是,SDK 中没有 C++ 示例,只有 C#。 创建包装类后,我可以成功地将仪器的序列号读取到 VARIANT 中: VARIANT
我继承了一个使用 CppWebBrowser 控件的旧应用程序。 该应用程序一直对 GET 请求使用::Navigate 方法,但现在我需要开始将它用于 POST;但是,现有代码不适用于 POST。我
使用 Delphi,我需要访问一个包含数组中的一条或多条记录的 OleVariant。 我调用的方法返回VT_RECORD的VT_ARRAY,记录本身定义为: struct StreamTimeInf
我是一名优秀的程序员,十分优秀!