0x80020009 OLE异常访问除0以外的任何数字
0x80020009 OLE Exception accessing any number other than 0
所以我正在使用com访问第三方程序,我使用以下方法从服务器获取属性:
HRESULT ConnectToHYSYS::OLEMethod(int nType, VARIANT * pvResult, IDispatch * pDisp, LPOLESTR ptName, int cArgs...){
if (!pDisp) return E_FAIL;
va_list marker;
va_start(marker, cArgs);
DISPPARAMS dp = { NULL, NULL, 0, 0 };
DISPID dispidNamed = DISPID_PROPERTYPUT;
DISPID dispID;
char szName[200];
// Convert down to ANSI
WideCharToMultiByte(CP_ACP, 0, ptName, -1, szName, 256, NULL, NULL);
// Get DISPID for name passed...
HRESULT hr = pDisp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID);
if (FAILED(hr)) {
return hr;
}
// Allocate memory for arguments...
VARIANT * pArgs = new VARIANT[cArgs + 1];
// Extract arguments...
for (int i = 0; i < cArgs; i++) {
pArgs[i] = va_arg(marker, VARIANT);
}
// Build DISPPARAMS
dp.cArgs = cArgs;
dp.rgvarg = pArgs;
// Handle special-case for property-puts!
if (nType & DISPATCH_PROPERTYPUT) {
dp.cNamedArgs = 1;
dp.rgdispidNamedArgs = &dispidNamed;
}
// Make the call!
hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, nType, &dp, pvResult, NULL, NULL);
if (FAILED(hr)) {
return hr;
}
// End variable-argument section...
va_end(marker);
delete[] pArgs;
return hr;
}
当我尝试通过以下方法访问集合中的对象时:
void ConnectToHYSYS::GetMaterialStream(int index) {
HRESULT hr;
VARIANT result;
VariantInit(&result);
hr = OLEMethod(DISPATCH_PROPERTYGET, &result, hyStreams, L"Item", 1, index);
CheckForHr(hr);
hyStream = result.pdispVal;}
它仅在index = 0时才返回HyStream成员;我检查了以下内容:1- HyStreams(集合)指针不是零2-具有索引IM试图访问的成员(该集合有36个HyStreams,但无法获得索引超过0的HyStream)3-调试时,当我拨打呼叫
时会发生错误hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, nType, &dp, pvResult, NULL, NULL);
HR返回上述错误...
您能弄清楚问题在哪里吗?谢谢
问题是通过(索引类型)的类型,我认为通过com进行的各种类型都必须b的对象。无论如何,将其更改为_variant_t,包括(没有它,您会得到链接和内容的讨厌错误),解决了问题,我可以循环整个集合。
相关文章:
- std::stoi 的版本拒绝任何非数字
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- C++:创建1000次唯一的随机分布,在任何分布中都没有重复的数字
- 是否有任何内置函数可以检查给定的两个数字在给定整数数组中的顺序是否相同?
- 如何在C++中生成低于或高于某个数字的任何随机数?
- 如果否则错误:如何使其打印任何数字
- 该代码不会在其中显示任何数字输入.如何使它显示任何输入
- 用字母打印以 10-16 为基数(我被困在一个必须打印出任何数字的项目上)
- 如何为字符串编写正则表达式,其中包含一个数字至少一个数字,并且不包含任何字母
- 可被数组中的任何数字整除的数字
- 无符号函数,用于返回使用任何数字的数字
- 0x80020009 OLE异常访问除0以外的任何数字
- 在以 8 开头的任何数字之前选择 "a" 或 "an"
- 除 "6" 作为最右边数字的整数输入外,任何整数输入都可以使用,但任何数字(如 ...6.导致分段错误,为什么?
- 我可以得到一个适用于任何数字类型的模板化均匀分布生成器吗?
- 除以零以外的任何数字会得到 -1.#IND
- 依靠任何数字类型(无符号、整数等)的隐式提升来加倍是否安全
- 用于检查向量中任何数字组合是否加起来为 int 的函数
- 当对任何数字进行移位操作时,如何返回原始数字
- 在c++中,如何编写一个捕获超过10的任何数字的异常?