kodges
Новичок
- Сообщения
- 42
- Репутация
- 0
Здравствуйте.
Подключаю стороннюю trans2quik.dll, подключаюсь к ней нормально, регистрирую Callback функцию, она успешно вызывается, НО одно из переданных значений в Callback функцию является указателем который можно использовать в дополнительных функциях DLL вызываемых из Callback функции. И вот эти доп функции у меня не работают (((
DLL подключается к программе QUIK и получает информацию о сделках и не только, но мне надо только инфу о сделках. Часть инфы которая сразу передается в колбек функцию я получаю нормально, а дополнительную инфу которую надо получать через доп функции из колбека я почему-то получить не могу (((
Описание CallBack функции тут https://euvgub.github.io/quik_user_manual/ch6_9_12.html
Сама Dll и примеры реально работающие с этой DLL на C++ есть тут https://arqatech.com/upload/iblock/80a/Trans2QuikAPI_1.3_x64.zip
Подключаю стороннюю trans2quik.dll, подключаюсь к ней нормально, регистрирую Callback функцию, она успешно вызывается, НО одно из переданных значений в Callback функцию является указателем который можно использовать в дополнительных функциях DLL вызываемых из Callback функции. И вот эти доп функции у меня не работают (((
DLL подключается к программе QUIK и получает информацию о сделках и не только, но мне надо только инфу о сделках. Часть инфы которая сразу передается в колбек функцию я получаю нормально, а дополнительную инфу которую надо получать через доп функции из колбека я почему-то получить не могу (((
Описание CallBack функции тут https://euvgub.github.io/quik_user_manual/ch6_9_12.html
Сама Dll и примеры реально работающие с этой DLL на C++ есть тут https://arqatech.com/upload/iblock/80a/Trans2QuikAPI_1.3_x64.zip
Код:
Local Const $sPathQuik = "C:\Market\Quik\"
Local $tErrMessage = DllStructCreate("char[1024]")
Local $hDll = DllOpen(@ScriptDir & "\trans2quik.dll")
;-- Connect
DllCall($hDll, "long", "TRANS2QUIK_CONNECT", "str", $sPathQuik, "long*", 0, "ptr", DllStructGetPtr($tErrMessage), "dword", DllStructGetSize($tErrMessage))
;-- reg callback
Local $CallbackStatusOrder = DLLCallbackRegister("pfnOrderStatusCallback", "ptr", "long;INT64;INT64;str;str;double;INT64;double;long;INT64")
;-- subscribe trades
DllCall($hDll, "long", "TRANS2QUIK_SUBSCRIBE_TRADES", "str", "", "str", "")
;-- start trades callback
Local $Result = DllCall($hDll, "long", "TRANS2QUIK_START_TRADES", "ptr", DllCallbackGetPtr($CallbackStatusOrder))
Func pfnOrderStatusCallback($nMode, $dNumber, $dOrderNumber, $ClassCode, $SecCode, $dPrice, $nQty, $dValue, $nIsSell, $tDescriptor)
Local $date = DllCall($hDll, "long", "TRANS2QUIK_TRADE_DATE", "INT64", $tDescriptor)
ConsoleWrite($date & @CRLF)
ConsoleWrite($nMode &'|'& $dNumber &'|'& $dOrderNumber &'|'& $ClassCode &'|'& $SecCode &'|'& $dPrice &'|'& $nQty &'|'& $dValue &'|'& $nIsSell &'|'& $tDescriptor & @CRLF)
EndFunc
; pfnOrderStatusCallback успешно выводит второй вывод в консоль вида (1|1925034003111410835|1925034003112524676|SPBFUT|RIH1|145400|1|215055.32|0|660600664),
; но не выводит первый вывод из переменной $date. В чем проблема не понимаю. Уже два дня мучаюсь, голову сломал... ПАМАГИТЕ!!!
Sleep(1000)
DllCall($hDll, 'long', 'TRANS2QUIK_UNSUBSCRIBE_TRADES')
DllCallbackFree($CallbackStatusOrder)
DllCall($hDll, 'long', 'TRANS2QUIK_DISCONNECT', 'long*', 0, 'ptr', DllStructGetPtr($tErrMessage), 'dword', DllStructGetSize($tErrMessage))
DllClose($hDll)