iCAx开思工具箱

标题: [求助]unauthorized API for CAA V5 [打印本页]

作者: hick    时间: 2007-7-16 19:18
标题: [求助]unauthorized API for CAA V5
...
# CAAV5-ERROR: unauthorized API for CAA V5:
# CAAV5-ERROR:    -> any
...

unauthorized API for CAA V5?
什么意思? 如何解决呢?
没有认证的API,我就没法使用了吗?
作者: hick    时间: 2007-7-16 19:40
我是需要用到  CATSafeArrayVariant

...
CATISpecObject_var spTmp = ...;
CATVariant * oVariantToCreateFromAny = NULL;
rc = ::ConvertAnyToVariant(spTmp ,oVariantToCreateFromAny);
listElements =::BuildFromVariantArray(oVariantToCreateFromAny, k);
...

mkmk时, 提示:
# CAAV5-ERROR: unauthorized API for CAA V5:
# CAAV5-ERROR:    -> any


作者: hick    时间: 2007-7-16 20:25
CATSafeArrayVariant *listElements = NULL;
CATListValCATISpecObject_var listSpecObject;
...
HRESULT rc = ::FillSafeArrayVariant(listElements, (const CATBaseDispatch**)&listSpecObject, iSize);

这里有什么错误?  FAILED(rc)

tks
作者: ririyeyjl    时间: 2007-7-17 13:51
不理解哦  
ConvertAnyToVariant,BuildFromVariantArray 这两个函数我的版本查不到,它们应该也是System Framework 里的吧?  
是否API 的不完全呢?
期待高手
作者: horizan    时间: 2007-7-17 16:11
ConvertAnyToVariant,BuildFromVariantArray不是为CAA提供的,是为Automation提供的。

如果要使用CATVariant,CAA提供的方法是BuildSafeArrayVariant,BuildVariant和ConvertSafeArrayVariant,ConvertVariant。
作者: hick    时间: 2007-7-17 19:52
非常感谢俩位!

头文件CATAutoConversions.h
ExportedByJS0DSPA CATSafeArrayVariant* BuildSafeArrayVariant(const CATBaseDispatch ** iObjectArray,  long iSize);

代码如下:
CATSafeArrayVariant *listElements = NULL;
CATListValCATISpecObject_var listSpecObject;
listSpecObject.Append(spObj1);
listSpecObject.Append(spObj2);
listElements = BuildSafeArrayVariant((const CATBaseDispatch**)&listSpecObject, 2);  //这句话有错!

我如何来构造一个CATSafeArrayVariant 对象数组呢? 
作者: horizan    时间: 2007-7-18 09:59
先QI到CATIABase再转,如果QI不到就不行。
作者: acoka    时间: 2007-7-19 00:16
#include "CATAutoConversions.h"

//ExportedByJS0DSPA
//CATSafeArrayVariant* BuildSafeArrayVariant(const CATBaseDispatch ** iObjectArray,  long iSize);

CATSafeArrayVariant *listElements = NULL;

CATBaseDispatch* pBD1 = null;
spObj1->QueryInterface( IID_CATBaseDispatch, (void**)&pBD1);
CATBaseDispatch* pBD2 = null;
spObj2->QueryInterface( IID_CATBaseDispatch, (void**)&pBD2);

//const CATBaseDispatch** ppBD = new CATBaseDispatch*[2];
CATBaseDispatch** ppBD = new CATBaseDispatch*[2];
ppBD[0] = pBD1;
ppBD[1] = pBD2;

listElements = BuildSafeArrayVariant( ppBD,  2);  
//is it OK?
作者: hick    时间: 2007-7-19 00:48
非常感谢acoka !
谢谢horizan,ririyeyjl

正如acoka的方法,问题解决了,不应该用CATListValCATISpecObject_var




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3