如何将VB6中的双精度数组传递给VC ++ ..这段代码有什么问题? [英] How to pass an array of doubles from VB6 to VC++..What is wrong with this code?

查看:76
本文介绍了如何将VB6中的双精度数组传递给VC ++ ..这段代码有什么问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

VB代码: dSelfCdArr是我的双值数组



VB Code: dSelfCdArr is my array of double values

Public Sub FilterDocTypeByPriv(colEventSets As Collection)

Dim lCount As Long
Dim oColItem As Object
Dim objDBEventSetRow As DB_EventSetRow
Dim evYes As Boolean
Dim dSelfCdArr() As Double
For lCount = 1 To colEventSets.Count
    Set objDBEventSetRow = colEventSets(lCount)
    ReDim Preserve dSelfCdArr(1 To lCount)
    dSelfCdArr(lCount) = CDbl(objDBEventSetRow.dSelf_cd)
Next

Call m_dtsAppForm.DocController.HasPrivCreateResultEventCode(m_dUserId, m_dPositionCd, m_dPPRCd, dSelfCdArr)
End Sub





C ++ Idl文件:





C++ Idl file:

[id(51), helpstring("method HasPrivCreateResultEventCode")] HRESULT HasPrivCreateResultEventCode([in]double dUserId,[in]double dPosCd,[in]double dPPRCd, [in, out] VARIANT* pEventCode); 





C ++代码:我在VARIANT * pEventCode的第一行收到错误的指示





C++ Code: I get bad pointers in the first line for VARIANT* pEventCode

STDMETHODIMP CDocumentController::HasPrivCreateResultEventCode(double dUserId,double dPosCd,double dPPRCd, VARIANT* pEventCode)
{   

HRESULT hr = E_FAIL;
AFX_MANAGE_STATE(AfxGetStaticModuleState())

if (V_VT(pEventCode) == (VT_ARRAY | VT_R8))
{
    CComSafeArray<double> arrECode;

    arrECode.Attach(pEventCode->parray);

    double pVals;

    int iCount = arrECode.GetCount();

    CMap<double,double,bool,bool> mapEventCds;

    for(int iIndex = 0; iIndex < iCount; iIndex++)
    {                              
        double pVals = arrECode.GetAt(iIndex);

        mapEventCds.SetAt(pVals, false);

        std::cout << "element " << iIndex << ": value = " << pVals << std::endl;
    }

    CheckPrivViewResultEventCds(dUserId, dPosCd, dPPRCd, mapEventCds);
                //pEventCode->c

    double      dEventCd(0.0);
    bool        bPriv(false);
    POSITION    pos(mapEventCds.GetStartPosition());
    INT_PTR     nEventCnt(mapEventCds.GetCount());

    CComSafeArray<double> pSafeArraypEventCode = NULL;
    for(INT_PTR count(0); count < nEventCnt; ++count)
    {
        mapEventCds.GetNextAssoc(pos, dEventCd, bPriv);     
        if (bPriv)
        {   
            pSafeArraypEventCode.Add(dEventCd);
        }
    }

    pEventCode->parray = pSafeArraypEventCode.Detach();
    // Empty the CMap
    mapEventCds.RemoveAll();

}
return S_OK;
}

推荐答案

您可以完成发布在VB中声明函数的方式以及如何在C ++中定义VARIANT 。



但是,看看这篇文章 http://支持.microsoft.com / kb / 207931 [ ^ ]



希望它足以让你再次前进。
You could have done with posting how you declared the function in VB and how VARIANT is defined in your C++.

However, have a look at this article http://support.microsoft.com/kb/207931[^]

Hopefully it's enough to get you going again.


这篇关于如何将VB6中的双精度数组传递给VC ++ ..这段代码有什么问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆