如何用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 VBSAddin::BaoHanTest(){ 剛才的那段代碼} 在vbs里調用如下: dim nkh(1)
VARIANT vt = sa.Detach();
return vt;
Dim MyAddin
Set MyAddin = CreateObject("MyActiveXDemo.VBSAddin")
nkh= MyAddin.BaoHanTest()
msgbox nkh(0)提示 運行時錯誤 ,描述為類型不匹配,是我在vbs里調用錯誤嗎,應該怎樣調用? - 網友回復: 把你的C++工程,去掉編譯的中間文件,把工程打包壓縮過來我們幫你看看
有思路,想編寫各種指標公式,程序化交易模型,選股公式,預警公式的朋友
可聯系技術人員 QQ: 1145508240 進行 有償 編寫!(不貴!點擊查看價格!)
相關文章
-
沒有相關內容