コード例 #1
0
        private void GetPriceRecord( MSFL.MSFLSecurityInfo msflSecurityInfo )
        {
            IntPtr hSecurity = msflSecurityInfo.hSecurity;

            int iErr = MSFL.MSFL1_LockSecurity( hSecurity, MSFL.MSFL_LOCK_PREV_WRITE_LOCK );
            if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR )
                return;

            ushort wPriceRecCount = 0;
            iErr = MSFL.MSFL1_GetDataRecordCount( hSecurity, ref wPriceRecCount );
            if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR )
                return;

            if ( wPriceRecCount > 0 )
            {
                iErr = MSFL.MSFL1_SeekBeginData( hSecurity );
                if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR )
                    return;

                MSFL.DateTime sDateTime = new MSFL.DateTime();
                m_PriceRecordArray = new MSFL.MSFLPriceRecord[wPriceRecCount];

                iErr = MSFL.MSFL2_ReadMultipleRecs( hSecurity, m_PriceRecordArray, ref sDateTime, ref wPriceRecCount, (int)MSFL.MSFL_FIND.MSFL_FIND_USE_CURRENT_POS );
                if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR )
                    return;

                // Unlock the security (we're done using it)
                iErr = MSFL.MSFL1_UnlockSecurity( hSecurity );
            }
        }
コード例 #2
0
        public static bool TryLoadMsflPriceInfo( string stockName, string stockSymbol, string strFilePath, out MSFL.MSFLPriceRecord[] msflPriceRecordArray )
        {
            msflPriceRecordArray = new MSFL.MSFLPriceRecord[0];

            string strStockCode = GetStockCode( stockName, stockSymbol );
            if ( s_PriceDictionary.TryGetValue( strStockCode, out msflPriceRecordArray ) == true )
                return true;

            if ( Directory.Exists( strFilePath ) == false )
                return false;

            byte dirNumber = 0;

            int iErr = MSFL.MSFL1_OpenDirectory( strFilePath, ref dirNumber, MSFL.MSFL_DIR_FORCE_USER_IN );
            if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR )
                return false;

            MSFL.MSFLDirectoryStatus msflDirectoryStatus = new MSFL.MSFLDirectoryStatus();
            msflDirectoryStatus.dwTotalSize = (uint)Marshal.SizeOf( msflDirectoryStatus );

            iErr = MSFL.MSFL1_GetDirectoryStatus( dirNumber, string.Empty, ref msflDirectoryStatus );
            if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR )
                return false;

            if ( msflDirectoryStatus.bExists == false || msflDirectoryStatus.bOpen == false || msflDirectoryStatus.bMetaStockDir == false )
                return false;

            MSFL.MSFLSecurityInfo msflSecurityInfo = new MSFL.MSFLSecurityInfo();
            msflSecurityInfo.dwTotalSize = (uint)Marshal.SizeOf( msflSecurityInfo );

            iErr = MSFL.MSFL1_GetFirstSecurityInfo( dirNumber, ref msflSecurityInfo );
            while ( iErr == (int)MSFL.MSFL_ERR.MSFL_NO_ERR || iErr == (int)MSFL.MSFL_Messages.MSFL_MSG_LAST_SECURITY_IN_DIR )
            {
                if ( msflSecurityInfo.szName == stockName && msflSecurityInfo.szSymbol == stockSymbol )
                {
                    iErr = MSFL.MSFL1_LockSecurity( msflSecurityInfo.hSecurity, MSFL.MSFL_LOCK_PREV_WRITE_LOCK );
                    if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR )
                        break;

                    ushort wPriceRecCount = 0;
                    iErr = MSFL.MSFL1_GetDataRecordCount( msflSecurityInfo.hSecurity, ref wPriceRecCount );
                    if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR )
                        break;

                    if ( wPriceRecCount > 0 )
                    {
                        iErr = MSFL.MSFL1_SeekBeginData( msflSecurityInfo.hSecurity );
                        if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR )
                            break;

                        MSFL.DateTime sDateTime = new MSFL.DateTime();
                        msflPriceRecordArray = new MSFL.MSFLPriceRecord[wPriceRecCount];

                        iErr = MSFL.MSFL2_ReadMultipleRecs( msflSecurityInfo.hSecurity, msflPriceRecordArray, ref sDateTime, ref wPriceRecCount, (int)MSFL.MSFL_FIND.MSFL_FIND_USE_CURRENT_POS );
                        if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR )
                            break;

                        // Unlock the security (we're done using it)
                        iErr = MSFL.MSFL1_UnlockSecurity( msflSecurityInfo.hSecurity );

                        iErr = MSFL.MSFL1_CloseDirectory( dirNumber );

                        s_PriceDictionary.Add( strStockCode, msflPriceRecordArray );

                        return true;
                    }

                    break;
                }

                if ( iErr == (int)MSFL.MSFL_Messages.MSFL_MSG_LAST_SECURITY_IN_DIR )
                    break;

                iErr = MSFL.MSFL1_GetNextSecurityInfo( msflSecurityInfo.hSecurity, ref msflSecurityInfo );
            }

            MSFL.MSFL1_CloseDirectory( dirNumber );

            return false;
        }
コード例 #3
0
        private void ListViewSecurity_SelectedIndexChanged( object sender, EventArgs e )
        {
            Point cursorPoint = this.ListViewSecurity.PointToClient( Cursor.Position );
            ListViewItem listViewItem = this.ListViewSecurity.GetItemAt( cursorPoint.X, cursorPoint.Y );
            if ( listViewItem == null )
                return;
            else
            {
                this.ListViewPrice.VirtualListSize = 0;
                this.ListViewPrice.Items.Clear();
            }

            IntPtr hSecurity = IntPtr.Zero;
            if ( m_SecurityDictionary.TryGetValue( listViewItem, out hSecurity ) == false )
                return;

            int iErr = MSFL.MSFL1_LockSecurity( hSecurity, MSFL.MSFL_LOCK_PREV_WRITE_LOCK );
            if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR )
                return;

            ushort wPriceRecCount = 0;
            iErr = MSFL.MSFL1_GetDataRecordCount( hSecurity, ref wPriceRecCount );
            if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR )
                return;

            if ( wPriceRecCount > 0 )
            {
                iErr = MSFL.MSFL1_SeekBeginData( hSecurity );
                if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR )
                    return;

                MSFL.DateTime sDateTime = new MSFL.DateTime();
                MSFL.MSFLPriceRecord[] pPriceRec = new MSFL.MSFLPriceRecord[wPriceRecCount];

                iErr = MSFL.MSFL2_ReadMultipleRecs( hSecurity, pPriceRec, ref sDateTime, ref wPriceRecCount, (int)MSFL.MSFL_FIND.MSFL_FIND_USE_CURRENT_POS );
                if ( iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR )
                    return;

                // Unlock the security (we're done using it)
                iErr = MSFL.MSFL1_UnlockSecurity( hSecurity );

                // numbers for summing price info
                float fOpenSum = 0.0f, fHighSum = 0.0f, fLowSum = 0.0f, fCloseSum = 0.0f, fVolumeSum = 0.0f, fOpenIntSum = 0.0f;

                List<ListViewItem> listViewItemList = new List<ListViewItem>( 2048 );
                
                StringBuilder szBuf = new StringBuilder( MSFL.MSFL_MAX_NAME_LENGTH + 1 );
                for ( int iIndex = 0; iIndex < pPriceRec.Length; iIndex++ )
                {
                    MSFL.MSFLPriceRecord msflPriceRecord  = pPriceRec[iIndex];

                    listViewItem = new ListViewItem();
                    if ( ( msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_DATE ) == MSFL.MSFL_DATA_DATE )
                    {
                        MSFL.MSFL1_FormatDate( szBuf, (ushort)szBuf.Capacity, msflPriceRecord.lDate );
                        listViewItem.Text = szBuf.ToString();
                    }
                    else
                        listViewItem.Text = "N/A";

                    ListViewItem.ListViewSubItem subListViewItem1 = new ListViewItem.ListViewSubItem();
                    if ( ( msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_TIME ) == MSFL.MSFL_DATA_TIME )
                    {
                        MSFL.MSFL1_FormatTime( szBuf, (ushort)szBuf.Capacity, msflPriceRecord.lTime, true );
                        subListViewItem1.Text = szBuf.ToString();
                    }
                    else
                        subListViewItem1.Text = "N/A";

                    ListViewItem.ListViewSubItem subListViewItem2 = new ListViewItem.ListViewSubItem();
                    if ( ( msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_OPEN ) == MSFL.MSFL_DATA_OPEN )
                    {
                        fOpenSum += msflPriceRecord.fOpen;
                        subListViewItem2.Text = msflPriceRecord.fOpen.ToString( "0.00", CultureInfo.InvariantCulture );
                    }
                    else
                        subListViewItem2.Text = "N/A";

                    ListViewItem.ListViewSubItem subListViewItem3 = new ListViewItem.ListViewSubItem();
                    if ( ( msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_HIGH ) == MSFL.MSFL_DATA_HIGH )
                    {
                        fHighSum += msflPriceRecord.fHigh;
                        subListViewItem3.Text = msflPriceRecord.fHigh.ToString( "0.00", CultureInfo.InvariantCulture );
                    }
                    else
                        subListViewItem3.Text = "N/A";

                    ListViewItem.ListViewSubItem subListViewItem4 = new ListViewItem.ListViewSubItem();
                    if ( ( msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_LOW ) == MSFL.MSFL_DATA_LOW )
                    {
                        fLowSum += msflPriceRecord.fLow;
                        subListViewItem4.Text = msflPriceRecord.fLow.ToString( "0.00", CultureInfo.InvariantCulture );
                    }
                    else
                        subListViewItem4.Text = "N/A";

                    ListViewItem.ListViewSubItem subListViewItem5 = new ListViewItem.ListViewSubItem();
                    if ( ( msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_CLOSE ) == MSFL.MSFL_DATA_CLOSE )
                    {
                        fCloseSum += msflPriceRecord.fClose;
                        subListViewItem5.Text = msflPriceRecord.fClose.ToString( "0.00", CultureInfo.InvariantCulture );
                    }
                    else
                        subListViewItem5.Text = "N/A";

                    ListViewItem.ListViewSubItem subListViewItem6 = new ListViewItem.ListViewSubItem();
                    if ( ( msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_VOLUME ) == MSFL.MSFL_DATA_VOLUME )
                    {
                        fVolumeSum += msflPriceRecord.fVolume;
                        subListViewItem6.Text = msflPriceRecord.fVolume.ToString( "0.", CultureInfo.InvariantCulture );
                    }
                    else
                        subListViewItem6.Text = "N/A";

                    ListViewItem.ListViewSubItem subListViewItem7 = new ListViewItem.ListViewSubItem();
                    if ( ( msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_OPENINT ) == MSFL.MSFL_DATA_OPENINT )
                    {
                        fOpenIntSum += msflPriceRecord.fOpenInt;
                        subListViewItem7.Text = msflPriceRecord.fOpenInt.ToString( "0.00", CultureInfo.InvariantCulture );
                    }
                    else
                        subListViewItem7.Text = "N/A";

                    listViewItem.SubItems.Add( subListViewItem1 );
                    listViewItem.SubItems.Add( subListViewItem2 );
                    listViewItem.SubItems.Add( subListViewItem3 );
                    listViewItem.SubItems.Add( subListViewItem4 );
                    listViewItem.SubItems.Add( subListViewItem5 );
                    listViewItem.SubItems.Add( subListViewItem6 );
                    listViewItem.SubItems.Add( subListViewItem7 );

                    //this.ListViewPrice.Items.Add( listViewItem );
                    listViewItemList.Add( listViewItem );
                }

                m_PriceArray = listViewItemList.ToArray();
                this.ListViewPrice.VirtualListSize = m_PriceArray.Length;
            }
        }
コード例 #4
0
        public static bool TryLoadMsflPriceInfo(string stockName, string stockSymbol, string strFilePath, out MSFL.MSFLPriceRecord[] msflPriceRecordArray)
        {
            msflPriceRecordArray = new MSFL.MSFLPriceRecord[0];

            string strStockCode = GetStockCode(stockName, stockSymbol);

            if (s_PriceDictionary.TryGetValue(strStockCode, out msflPriceRecordArray) == true)
            {
                return(true);
            }

            if (Directory.Exists(strFilePath) == false)
            {
                return(false);
            }

            byte dirNumber = 0;

            int iErr = MSFL.MSFL1_OpenDirectory(strFilePath, ref dirNumber, MSFL.MSFL_DIR_FORCE_USER_IN);

            if (iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR)
            {
                return(false);
            }

            MSFL.MSFLDirectoryStatus msflDirectoryStatus = new MSFL.MSFLDirectoryStatus();
            msflDirectoryStatus.dwTotalSize = (uint)Marshal.SizeOf(msflDirectoryStatus);

            iErr = MSFL.MSFL1_GetDirectoryStatus(dirNumber, string.Empty, ref msflDirectoryStatus);
            if (iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR)
            {
                return(false);
            }

            if (msflDirectoryStatus.bExists == false || msflDirectoryStatus.bOpen == false || msflDirectoryStatus.bMetaStockDir == false)
            {
                return(false);
            }

            MSFL.MSFLSecurityInfo msflSecurityInfo = new MSFL.MSFLSecurityInfo();
            msflSecurityInfo.dwTotalSize = (uint)Marshal.SizeOf(msflSecurityInfo);

            iErr = MSFL.MSFL1_GetFirstSecurityInfo(dirNumber, ref msflSecurityInfo);
            while (iErr == (int)MSFL.MSFL_ERR.MSFL_NO_ERR || iErr == (int)MSFL.MSFL_Messages.MSFL_MSG_LAST_SECURITY_IN_DIR)
            {
                if (msflSecurityInfo.szName == stockName && msflSecurityInfo.szSymbol == stockSymbol)
                {
                    iErr = MSFL.MSFL1_LockSecurity(msflSecurityInfo.hSecurity, MSFL.MSFL_LOCK_PREV_WRITE_LOCK);
                    if (iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR)
                    {
                        break;
                    }

                    ushort wPriceRecCount = 0;
                    iErr = MSFL.MSFL1_GetDataRecordCount(msflSecurityInfo.hSecurity, ref wPriceRecCount);
                    if (iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR)
                    {
                        break;
                    }

                    if (wPriceRecCount > 0)
                    {
                        iErr = MSFL.MSFL1_SeekBeginData(msflSecurityInfo.hSecurity);
                        if (iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR)
                        {
                            break;
                        }

                        MSFL.DateTime sDateTime = new MSFL.DateTime();
                        msflPriceRecordArray = new MSFL.MSFLPriceRecord[wPriceRecCount];

                        iErr = MSFL.MSFL2_ReadMultipleRecs(msflSecurityInfo.hSecurity, msflPriceRecordArray, ref sDateTime, ref wPriceRecCount, (int)MSFL.MSFL_FIND.MSFL_FIND_USE_CURRENT_POS);
                        if (iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR)
                        {
                            break;
                        }

                        // Unlock the security (we're done using it)
                        iErr = MSFL.MSFL1_UnlockSecurity(msflSecurityInfo.hSecurity);

                        iErr = MSFL.MSFL1_CloseDirectory(dirNumber);

                        s_PriceDictionary.Add(strStockCode, msflPriceRecordArray);

                        return(true);
                    }

                    break;
                }

                if (iErr == (int)MSFL.MSFL_Messages.MSFL_MSG_LAST_SECURITY_IN_DIR)
                {
                    break;
                }

                iErr = MSFL.MSFL1_GetNextSecurityInfo(msflSecurityInfo.hSecurity, ref msflSecurityInfo);
            }

            MSFL.MSFL1_CloseDirectory(dirNumber);

            return(false);
        }