Ejemplo n.º 1
0
        //逐笔委托
        public TDBErrNo GetOrder(TDBReq reqOrder, out TDBOrder[] tdbOrder)
        {
            TDBErrNo nVerifyRet = SimpleVerifyReqInput(reqOrder);

            tdbOrder = new TDBOrder[0];
            if (nVerifyRet != TDBErrNo.TDB_SUCCESS)
            {
                return(nVerifyRet);
            }

            LibTDBWrap.TDBDefine_ReqTransaction reqAPIOrder = reqOrder.ToAPIReqTransaction();

            IntPtr pUnmanagedReqAPIOrder = LibWrapHelper.CopyStructToGlobalMem(reqAPIOrder, typeof(LibTDBWrap.TDBDefine_ReqTransaction));
            IntPtr ppOrder = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(IntPtr)));
            IntPtr pCount  = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(Int32)));

            int nRet = LibTDBWrap.TDB_GetOrder(m_hTdb, pUnmanagedReqAPIOrder, ppOrder, pCount);

            IntPtr pOrder = (IntPtr)Marshal.PtrToStructure(ppOrder, typeof(IntPtr));
            int    nCount = (Int32)Marshal.PtrToStructure(pCount, typeof(Int32));

            if ((UInt64)pOrder != 0 && nCount > 0 && nRet == 0)
            {
                tdbOrder = new TDBOrder[nCount];
                int nElemLen = Marshal.SizeOf(typeof(LibTDBWrap.TDBDefine_Order));
                for (int i = 0; i < nCount; i++)
                {
                    IntPtr pCurRecord = (IntPtr)((UInt64)pOrder + (UInt64)(nElemLen * i));
                    LibTDBWrap.TDBDefine_Order apiOrder = (LibTDBWrap.TDBDefine_Order)Marshal.PtrToStructure(pCurRecord, typeof(LibTDBWrap.TDBDefine_Order));
                    tdbOrder[i] = new TDBOrder();
                    tdbOrder[i].FromAPIOrder(ref apiOrder);
                }
            }
            else
            {
                //如果网络连接断掉,则关闭连接
                if (nRet == (int)TDBErrNo.TDB_NETWORK_ERROR)
                {
                    DisConnect();
                }
            }

            if ((UInt64)pOrder != 0)
            {
                LibTDBWrap.TDB_Free(pOrder);
            }

            Marshal.FreeHGlobal(pUnmanagedReqAPIOrder);
            Marshal.FreeHGlobal(ppOrder);
            Marshal.FreeHGlobal(pCount);

            return((TDBErrNo)nRet);
        }
Ejemplo n.º 2
0
        public int m_nOrderVolume;          //委托数量

        public void FromAPIOrder(ref LibTDBWrap.TDBDefine_Order apiOrder)
        {
            m_strWindCode    = LibWrapHelper.AnsiArr2String(apiOrder.chWindCode, 0, apiOrder.chWindCode.Length);
            m_strCode        = LibWrapHelper.AnsiArr2String(apiOrder.chCode, 0, apiOrder.chCode.Length);
            m_nDate          = apiOrder.nDate;
            m_nTime          = apiOrder.nTime;
            m_nIndex         = apiOrder.nIndex;
            m_nOrder         = apiOrder.nOrder;
            m_chOrderKind    = (char)apiOrder.chOrderKind;
            m_chFunctionCode = (char)apiOrder.chFunctionCode;
            m_nOrderPrice    = apiOrder.nOrderPrice;
            m_nOrderVolume   = apiOrder.nOrderVolume;
        }