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

如何用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  有需要幫忙請點擊這里留言!!!進行 有償 編寫!不貴!點擊查看價格!


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

相關文章

    沒有相關內容
主站蜘蛛池模板: 6080午夜一级毛片免费看6080夜福利| 亚洲免费综合色在线视频| 成在人线av无码免费高潮水| 免费观看性欧美大片无片| 国产1000部成人免费视频| 夫妇交换性3中文字幕k8| 久久精品中文字幕| 污污视频免费观看网站| 国产1区2区在线观看| 欧美日韩第一区| 处女的诱惑在线观看| 中文字幕精品一区二区精品 | 久久精品成人国产午夜| 波多野结衣无内裤护士| 国产suv精品一区二区883| 日本高清在线免费| 国自产精品手机在线观看视频| 中文字幕人妻高清乱码| 最好看的最新中文字幕2018免费视频| 亚洲精品电影天堂网| 精品欧美一区二区3d动漫| 国产啪精品视频网站免费尤物| 18禁黄网站禁片免费观看不卡| 女人国产香蕉久久精品| 中文字幕无码乱人伦| 最近2019中文字幕mv免费看| 亚洲欧美日本a∨在线观看| 粉嫩大学生无套内射无码卡视频 | 欧美大片在线观看完整版| 人妻无码视频一区二区三区| 老司机久久精品| 国产内射999视频一区| 天天久久影视色香综合网| 国产色综合天天综合网| h视频在线免费| 成人区人妻精品一区二区不卡网站 | 欧美黑人又粗又大又爽免费| 凹凸精品视频分类国产品免费| 邻居的又大又硬又粗好爽| 国产手机在线精品| 4399理论片午午伦夜理片|