以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  高级功能研发区  (http://www.weistock.com/bbs/list.asp?boardid=5)
----  VBS 调用C++计算后 ,回传Safearray数组给VBS问题  (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=71050)

--  作者:wsslei
--  发布时间:2014/10/16 15:23:42
--  VBS 调用C++计算后 ,回传Safearray数组给VBS问题

VBS 调用C++计算后 ,回传Safearray数组给VBS问题, 写了个例程

 

VBS:

 

 Dim rarr 
 
    Set MyAddin = CreateObject("MyActiveXDemo.VBSAddin")
   
    rarr = MyAddin.MyTest(History.close(0))
   
    Dim MyVariable
 
    MyVariable = IsArray(rarr)
   
    call application.msgout("是否数组_"&MyVariable&"_上限_"&UBound(rarr)&"_下限_"&LBound(rarr))
    call application.msgout("是否数组_"&rarr(1))

 

   For i=0 To UBound(rarr)-LBound(rarr)
    call application.msgout("数组值_"&rarr(i))
   Next

 

VC:

VARIANT VBSAddin::MyTest(long a)  
{

   //返回数组
   VARIANT varChunk;

   SAFEARRAY  FAR*  psa;
   SAFEARRAYBOUND  rgsabound[1];
   rgsabound[0].lLbound=0;
   rgsabound[0].cElements=2;
   //psa=SafeArrayCreate(VT_I4,1,rgsabound);
   psa=SafeArrayCreate(VT_VARIANT,1,rgsabound);

   long  idx;
   long  setdt;

   idx=0;
   setdt=12;

   SafeArrayPutElement(psa,&idx,&setdt);

   idx=1;
   setdt=342;
   SafeArrayPutElement(psa,&idx,&setdt);

   varChunk.vt = VT_ARRAY|VT_VARIANT;
   varChunk.parray = psa;
   return varChunk;

}

 

返回回去,("是否数组_"&MyVariable&"_上限_"&UBound(rarr)&"_下限_"&LBound(rarr))  -true, 0,1

但是 msgout("数组值_"&rarr(i))  就报类型不匹配,这个该怎么弄,求助啊

 


--  作者:wsslei
--  发布时间:2014/10/16 15:40:01
--  
那个 long a参数也是 Vc 消息机制报错才加的,例程其实没用到
--  作者:wsslei
--  发布时间:2014/10/16 16:09:20
--  
我用 COleSafeArray 再试下
--  作者:王锋
--  发布时间:2014/10/17 12:48:19
--  
COleSafeArray 应该可以的