Trying my question again from different code editor. I can get realtime data from the api using vb b

Option Explicit


Private Sub Form_Load()
Me.WindowState = vbMaximized
End Sub


Sub Sleep_DoEvents(msg As String, Optional Milliseconds As Long = 3000)
Dim tc As Long

Form1.Caption = msg

tc = GetTickCount

While GetTickCount < tc + Milliseconds
Sleep 1
DoEvents
Wend
End Sub


Private Sub cmdNonRealtime_Click()

Dim MyEikonDDA As EikonDesktopDataAPI
Dim MyDex2Mgr As Dex2Mgr
Dim MyRData As Dex2Lib.RData
Dim MyDex2Cookie As Long
Dim MyFieldList As Variant
Dim MyItemList As Variant
Dim msg As String
Dim EikonInitResult As EikonDesktopDataAPILib.EEikonDataAPIInitializeResult
Dim Value_Returned
Dim DataStatus As Dex2Lib.DEX2_DataStatus
Dim MyRequestParamList As Variant

MyFieldList = "TR.CompanyName"

MyItemList = "GS"

MyRequestParamList = ""

Set MyEikonDDA = New EikonDesktopDataAPI
msg = "Waiting after Set EikonDDA = New EikonDesktopDataAPI"
Sleep_DoEvents msg, Milliseconds:=SLEEP_LENGTH

EikonInitResult = MyEikonDDA.Initialize

If EikonInitResult = Error_InitializeFail Then
MsgBox "The result of EikonDDA.Initialize was Error_InitializeFail, end"
End
End If

If EikonInitResult = Error_Reinitialize Then
MsgBox "The result of EikonDDA.Initialize was Error_Reinitialize, end"
End
End If

If EikonInitResult = Succeed Then
MsgBox "The result of EikonDDA.Initialize was Succeed, continue"
End If

msg = "Waiting after EikonDDA.Initialize"
Sleep_DoEvents msg, Milliseconds:=SLEEP_LENGTH

If EikonInitResult = Error_InitializeFail Then
'Handle fail case here
ElseIf EikonInitResult = Error_Reinitialize Then
'Handle reinitialize case here
End If

msg = "Waiting before EikonDDA.CreateDex2Mgr"
Sleep_DoEvents msg, Milliseconds:=SLEEP_LENGTH

Set MyDex2Mgr = MyEikonDDA.CreateDex2Mgr()
msg = "Waiting after Set MyDex2Mgr = EikonDDA.CreateDex2Mgr"
Sleep_DoEvents msg, Milliseconds:=SLEEP_LENGTH

MyDex2Cookie = MyDex2Mgr.Initialize(DE_MC_ADC_POWERLINK)

msg = "Waiting after MyDex2Mgr.Initialize"
Sleep_DoEvents msg, Milliseconds:=SLEEP_LENGTH

Set MyRData = MyDex2Mgr.CreateRData(MyDex2Cookie)
msg = "Waiting after MyDex2Mgr.MyDex2Mgr.CreateRData"
Sleep_DoEvents msg, Milliseconds:=SLEEP_LENGTH

MyRData.FieldList = MyFieldList
MyRData.InstrumentIDList = MyItemList
MyRData.DisplayParam = "RH:In CH:Fd"
MyRData.RequestParam = MyRequestParamList

MyRData.Subscribe

msg = "Waiting after MyRData.Subscribe"
Sleep_DoEvents msg, Milliseconds:=SLEEP_LENGTH

If MyRData Is Nothing Then

Else

Value_Returned = MyRData.Data(1, 1)

' ?err.Description
' Method 'Data' of object 'IRData' failed

MsgBox Value_Returned
End If

End Sub


Best Answer

  • You're not initializing Dex2 Manager correctly. You're missing a cast from Dex2Mgr class to IDex2Mgr2 interface, which is required. See VB code sample in this tutorial, Step2 - Create DEX2 object and initialize DEX2.