Results 1 to 2 of 2

Thread: API call returns only first character of data

  1. #1

    Thread Starter
    New Member
    Join Date
    Dec 2012
    Posts
    1

    API call returns only first character of data

    Hello,

    I am working on creating a console application to interface with our Nortel BCM 50 Call Detail Recording.
    Sample code is provided by Nortel; however, it is based in VB6 (I believe) and I am having some trouble getting the API calls to work properly in VB.net
    The problem is that I am supposed to receive a long string of text which includes incoming phone numbers and time stamps; however I am only receiving the very first character. An example string is supposed to look like "*121912 161428 0126 394 9999999999 UNKNOWN U R" where 9999999999 is a phone number, my code though only returns "*". The application is also supposed to receive multiple lines of this information in rapid succession, but it seems as though the API stops after the first character.

    The API in question is "VBCdrOpenConnection" which is supposed to call the function "CDRRecord" with new data.

    Another (possibly unrelated) question is how would I go about keeping a console application constantly running and waiting for input from the API without using something like "Console.ReadLine()" (the console app will never have user interaction).

    Please find below my VB.net code. If it is required I can provide the original VB6 sample code.

    Code:
    Option Explicit On
    Imports System.Threading
    Imports System.Windows.Forms
    
    Module CDR
        Declare Function VBCdrOpenConnection Lib "CDRClient.dll" (ByVal IPAddressOrMachineName As String, ByVal usernameOfCDRUserGroup As String, ByVal Password As String, ByVal CDRRecord As CDRRecordHandler, ByVal CDRStop As CDRStopHandler, ByVal applicationData As Integer) As Short
        Public Delegate Sub CDRRecordHandler(ByVal bStrMsg As String, ByVal applicationData As Integer)
        Public Delegate Sub CDRStopHandler(ByVal Reason As Integer, ByVal applicationData As Integer)
        Declare Function CdrCloseConnection Lib "CDRClient.dll" (ByVal Handle As Short) As Short
        Declare Function CdrClipFile Lib "CDRClient.dll" (ByVal Handle As Short) As Short
    
        'variables emptied for security purposes
        Const MAX_COUNT = 50
        Const BCM_ADDRESS = ""
        Const BCM_USER = ""
        Const BCM_PASS = ""
    
        Public CDRCount As Integer
        Public Handle As Integer
    
        Public Sub CDRRecord(ByVal bStrMsg As String, ByVal applicationData As Integer)
            CDRCount = CDRCount + 1
            MessageBox.Show(applicationData)
            appendText(bStrMsg)
        End Sub
    
        Public Sub CDRStop(ByVal Reason As Integer, ByVal applicationData As Integer)
            CDRCount = 0
            appendText(" stop reason " & CStr(Reason) & vbCrLf & "Disconnected" & vbCrLf)
        End Sub
    
        Public Sub appendText(ByVal msg As String)
            If (CDRCount > MAX_COUNT) Then
                Console.Clear()
            End If
            'MessageBox.Show(msg)
    
            Console.WriteLine(msg)
            Console.ReadLine()
        End Sub
    
        Declare Function SetConsoleCtrlHandler Lib "kernel32.dll" (ByVal HandlerRoutine As ControlEventHandler, ByVal Add As Int32) As Int32
        Public Delegate Sub ControlEventHandler(ByVal consoleEvent As ConsoleEvent)
    
        Public Enum ConsoleEvent
            CTRL_C = 0
            CTRL_BREAK = 1
            CTRL_CLOSE = 2
            CTRL_LOGOFF = 5
            CTRL_SHUTDOWN = 6
        End Enum
    
        Public Sub OnControlEvent(ByVal consoleEvent As ConsoleEvent)
            Handle = CdrCloseConnection(Handle)
            appendText("Disconnected" & vbCrLf)
            Handle = -1
        End Sub
    
        Sub Main()
            SetConsoleCtrlHandler(New ControlEventHandler(AddressOf OnControlEvent), True)
    
            CDRCount = 0
            Handle = VBCdrOpenConnection(BCM_ADDRESS, BCM_USER, BCM_PASS, New CDRRecordHandler(AddressOf CDRRecord), New CDRStopHandler(AddressOf CDRStop), 0)
    
            If Handle <> -1 Then
                appendText("Connected to " & BCM_ADDRESS & vbCrLf)
                'Thread.Sleep(10000)
            Else
                appendText("Failed to connect to " & BCM_ADDRESS & vbCrLf)
            End If
        End Sub
    End Module
    Any help with this would be greatly appreciated!

    Thank you,
    Daniel

  2. #2
    New Member
    Join Date
    Mar 2017
    Posts
    1

    Re: API call returns only first character of data

    Hi Daniel, if you made it work can you share the solution please d.deadlyprince@gmail.com

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width