您現在的位置:程序化交易>> 期貨公式>> 金字塔等>> 金字塔知識>>正文內容

如何用SAFEARRAY向VBS傳遞數組 [金字塔]

  • 咨詢內容:

    最近寫了個MFC Dll ,用VBS成功的向C++的Dll里傳遞了數組,可是處理完畢之后,我卻不知道怎樣傳回來了。

    我的函數體如下:

    BaoHanTest(const VARIANT FAR& vbkh, const VARIANT FAR& vbkl,long length, VARIANT FAR& buffer)

    其中vbkh,vbkl,length都是vbs傳給dll的,這部分C++獲取數據沒問題,buffer是用來傳出數組的

    需要傳給vbs的數組是這樣定義的:

     float *kh=new float [length+1];

    里面已經放好了數據,如今想通過buffer把它傳回VBS,用Array()接受,    例如,object.函數名 Array

    網上說用SAFEARRAY,可是我傳回去的都接受不到,不知道怎樣弄

     

  • 金字塔客服:

    給你一段金字塔的C++代碼

     

    VARIANT IFormulaRunTime::GetVARDATA(LPCTSTR Name)
    {
     COleSafeArray saRet;
     if(!m_pCallBack->m_pExp)
      return saRet.Detach();
     
     if(GetDataSize() == 0)
      return saRet.Detach();
     
     int nLineIndex = m_pCallBack->GetLineIndex(Name);
     if(nLineIndex < 0)
      return saRet.Detach();

     // Create the safe-array...
     saRet.CreateOneDim(VT_VARIANT, m_pCallBack->m_pRunTime->GetMainView()->m_pMarketData->m_dwDataNumber+1);
     
     // Initialize it with values...
     long lArrayIndex[1];
     for(UINT i = 0; i <= m_pCallBack->m_pRunTime->GetMainView()->m_pMarketData->m_dwDataNumber; i++)
     {
      int nIndex = i * m_pCallBack->m_pExp->m_nLineNum + nLineIndex;
      if(nIndex >= (int)m_pCallBack->m_pExp->m_arLineData.size())
      {
       return saRet.Detach();
      }

      lArrayIndex[0] = i;
      if(m_pCallBack->m_pExp->m_arLineData.m_pData[nIndex].m_bInvalid)
      {
       _variant_t vt(m_pCallBack->m_pExp->m_arLineData.m_pData[nIndex].m_dblVal);
       saRet.PutElement(lArrayIndex, &vt);
      }
      else
      {
       _variant_t vt(g_fInvalid);
       saRet.PutElement(lArrayIndex, &vt);
      }
     }
     
     // Return the safe-array encapsulated in a VARIANT...
     VARIANT vt = saRet.Detach();
     return vt;
    }

     

  • 用戶回復: 您好,我按照上面的思想寫了個測試用例:

     VARIANT varColInfo[3];
    //初始化 VARIANTs
    for (int m = 0; m < 3; m++)
    VariantInit(&varColInfo[m]);

    // 每一列
    varColInfo[0].vt = VT_UI4;
    varColInfo[0].lVal = 1;


    varColInfo[1].vt = VT_UI4;
    varColInfo[1].lVal = 2;

    COleSafeArray sa;
    //創造一維
    //用varColInfo初始化
    sa.CreateOneDim(VT_VARIANT, 2, varColInfo);

     // 返回
     VARIANT vt = sa.Detach();
     return vt;

    VARIANT VBSAddin::BaoHanTest(){ 剛才的那段代碼} 在vbs里調用如下: dim nkh(1)
     Dim MyAddin
       Set MyAddin = CreateObject("MyActiveXDemo.VBSAddin")
      nkh= MyAddin.BaoHanTest()
            msgbox nkh(0)提示 運行時錯誤 ,描述為類型不匹配,是我在vbs里調用錯誤嗎,應該怎樣調用?

     

  • 網友回復: 把你的C++工程,去掉編譯的中間文件,把工程打包壓縮過來我們幫你看看

 

有思路,想編寫各種指標公式,程序化交易模型,選股公式,預警公式的朋友

可聯系技術人員 QQ: 1145508240  有需要幫忙請點擊這里留言!!!進行 有償 編寫!不貴!點擊查看價格!


【字體: 】【打印文章】【查看評論

相關文章

    沒有相關內容
主站蜘蛛池模板: 亚洲av永久无码精品天堂久久| 国产一在线精品一区在线观看 | 国产欧美日韩专区| xxx毛茸茸的亚洲| 日本无遮挡漫画| 亚洲国产精品无码久久久蜜芽| 精品亚洲成a人无码成a在线观看| 国产成人刺激视频在线观看| 亚洲精品午夜久久久伊人| 2020国产精品自拍| 成人动漫视频在线| 久久青青草原国产精品免费| 深夜影院一级毛片| 四虎国产精品永免费| 99re66热这里只有精品17| 我的3个美艳馊子白莹小说| 人人妻人人做人人爽精品| 菠萝蜜视频在线看| 国产精品久久国产精品99盘| free性video西欧极品| 无码av专区丝袜专区| 么公又大又硬又粗又爽视频| 精品国产三级在线观看| 国产成人十八黄网片| 3d性欧美动漫精品xxxx| 女人18毛片特级一级免费视频| 久久66热这里只会有精品| 日韩精品在线一区二区| 亚洲图片欧美日韩| 狠狠色噜噜狠狠狠888米奇视频| 四虎影视久久久免费| 领导边摸边吃奶边做爽在线观看 | 经典三级四虎在线观看| 国产精品视频一区二区三区四 | 色噜噜狠狠色综合欧洲| 国产欧美亚洲精品第一页久久肉| 97色在线视频观看香蕉| 女女互揉吃奶揉到高潮视频| 中文字幕一区在线| 日产乱码免费一卡二卡在线| 国产成人精品高清在线观看99|