Через дескрипторы сделки и заявки внутри CALLBACK функций вызывается много дополнительных процедур. Можно ли вызывать эти процедуры вне CALLBACK функции, имея только сохранённый дескриптор из CALLBACK функции.
Если Да, то как долго он действует. Ведь у него ограничение Long.
Это я прочитал. Поэтому и задал вопрос о сохранении дескриптора и дальнейшем использовании. Является ли переменная дескриптора глобальным идентификатором или только локальным?
И какая есть возможность прямого вызова этих внутренних функций из DLL, перечисленных внутри CALLBACK? (В списке экспортируемых многие из них есть).
Объясню. На момент компиляции CALLBACK функции, я не знаю, какие специальные функции мне понадобится потом вызывать. А вызывать все подряд, чтобы только было - ресурсозатратно.
Олег, Как уже было сказано указанные функции предназначены только для вызова внутри колбека. От того как Вы переставите слова в вопросе, ответ не поменяется.
Цитата
Олег написал: На момент компиляции CALLBACK функции, я не знаю, какие специальные функции мне понадобится потом вызывать.
Сделайте внутри колбека несколько разных функций, которые будут срабатывать по условию, каждая со своими спец функциями. Не видим проблем в этом.
Где можно посмотреть описание формата значений возврата этих специальных функций типа Long из САLLBACKов?
long __stdcall TRANS2QUIK_ORDER_DATE (intptr_t nOrderDescriptor) – возвращает дату заявки;
long __stdcall TRANS2QUIK_ORDER_TIME (intptr_t nOrderDescriptor) – возвращает время заявки;
long __stdcall TRANS2QUIK_ORDER_ACTIVATION_TIME (intptr_t nOrderDescriptor) – возвращает время активации заявки;
long __stdcall TRANS2QUIK_ORDER_WITHDRAW_TIME (intptr_t nOrderDescriptor) – возвращает время снятия заявки; (в API_Tester_DLG.exe возвращает 0 при снятии заявки вручную)
long __stdcall TRANS2QUIK_ORDER_EXPIRY (intptr_t nOrderDescriptor) – возвращает дату окончания срока действия заявки;(в API_Tester_DLG.exe возвращает -1)
(в API_Tester_DLG.exe возвращает 0 также WDDate, WDTimeMicrosec). Соответствующие им функции подключены в DLL?
long __stdcall TRANS2QUIK_ORDER_EXTENDED_FLAGS (intptr_t nOrderDescriptor) – возвращает расширенные флаги заявки;
long __stdcall TRANS2QUIK_ORDER_EXEC_TYPE (intptr_t nOrderDescriptor) – возвращает тип исполнения заявки; «0» – значение не задано;
Каковы максимальные значения для: long nExtendedErrorCode
long __stdcall TRANS2QUIK_ORDER_UID (intptr_t nOrderDescriptor) – возвращает UserID пользователя, указанный в заявке;
Я, конечно, понимаю, что Long - это 2 147 483 647. А реально MAX?
Почему нужна информация о макс. значениях.
В Амиброкере используется single Float, а это гарантированно только 6 значащих цифр. Поэтому смотрю, что можно запихнуть в этот формат напрямую без дополнительных ухищрений.
Олег написал: long __stdcall TRANS2QUIK_ORDER_DATE (intptr_t nOrderDescriptor) – возвращает дату заявки;
Формат соответствует формату: yyyymmdd
Цитата
Олег написал: long __stdcall TRANS2QUIK_ORDER_TIME (intptr_t nOrderDescriptor) – возвращает время заявки;
Цитата
Олег написал: long __stdcall TRANS2QUIK_ORDER_ACTIVATION_TIME (intptr_t nOrderDescriptor) – возвращает время активации заявки;
Формат соответствует формату: hhmmss
Относительно:
Цитата
Олег написал: long __stdcall TRANS2QUIK_ORDER_WITHDRAW_TIME (intptr_t nOrderDescriptor) – возвращает время снятия заявки; (в API_Tester_DLG.exe возвращает 0 при снятии заявки вручную) long __stdcall TRANS2QUIK_ORDER_EXPIRY (intptr_t nOrderDescriptor) – возвращает дату окончания срока действия заявки;(в API_Tester_DLG.exe возвращает -1) (в API_Tester_DLG.exe возвращает 0 также WDDate, WDTimeMicrosec). Соответствующие им функции подключены в DLL?
Ваше сообщение получено, проблема изучается. Постараемся в ближайшее время дать ответ.
Цитата
Олег написал: Каковы максимальные значения для: long nExtendedErrorCode
Максимальное значение равно 1023.
Цитата
Олег написал: Я, конечно, понимаю, что Long - это 2 147 483 647. А реально MAX?
В данном случае максимальное значение равно 2147483647.
Вопрос по МАХ был, конечно, про long, возвращаемый функциями.
Каково максимальное значения для: long __stdcall TRANS2QUIK_ORDER_UID (intptr_t nOrderDescriptor) – возвращает UserID пользователя, указанный в заявке;
Каков формат возвращаемых значений для функций:
long __stdcall TRANS2QUIK_ORDER_EXTENDED_FLAGS (intptr_t nOrderDescriptor) – возвращает расширенные флаги заявки;
long __stdcall TRANS2QUIK_ORDER_EXEC_TYPE (intptr_t nOrderDescriptor) – возвращает тип исполнения заявки; «0» – значение не задано;
long TRANS2QUIK_API __stdcall TRANS2QUIK_START_TRADES(TRANS2QUIK_TRADE_STATUS_CALLBACK pfnTradeStatusCallback); (для этой функции в описании написано void, а в примере long)
Олег написал: Каково максимальное значения для: long __stdcall TRANS2QUIK_ORDER_UID (intptr_t nOrderDescriptor) – возвращает UserID пользователя, указанный в заявке;
UID пользователя, это номер пользователя в базе данных сервера брокера, максимум будет таким, какой поместится в БД. Формально максимум ограничен размером long.
Цитата
Олег написал: Каков формат возвращаемых значений для функций: long __stdcall TRANS2QUIK_ORDER_EXTENDED_FLAGS (intptr_t nOrderDescriptor) – возвращает расширенные флаги заявки; long __stdcall TRANS2QUIK_ORDER_EXEC_TYPE (intptr_t nOrderDescriptor) – возвращает тип исполнения заявки; «0» – значение не задано;
Функции возвращают обычное десятичное число, которое если преобразовать в двоичный вид, каждое число (0 или 1) которого будет что-то означать. Из максимального long значимы только первые 1023, остальные, если и есть, означают служебную информацию.
Цитата
Олег написал: long TRANS2QUIK_API __stdcall TRANS2QUIK_START_TRADES(TRANS2QUIK_TRADE_STATUS_CALLBACK pfnTradeStatusCallback); (для этой функции в описании написано void, а в примере long)
В руководстве пользователя функция void __stdcall TRANS2QUIK_TRANSACTION_REPLY_CALLBACK(long nTransactionResult, long nTransactionExtendedErrorCode, long nTransactionReplyCode, DWORD dwTransId, insigned__int64 dOrderNum, LPSTR lpstrTransactionReplyMessage, intptr_t transReplyDescriptor) последним параметром имеет дескриптор.
В примерах для API_Tester_DLG.exe и в прототипе функции typedef void (__stdcall *TRANS2QUIK_TRANSACTION_REPLY_CALLBACK) (long nTransactionResult, long nTransactionExtendedErrorCode, long nTransactionReplyCode, DWORD dwTransId, double dOrderNum, LPCSTR lpcstrTransactionReplyMessage); из trans2quik_api.h параметр дескриптора отсутствует.
Как получить этот дескриптор для доступа к вызову специальных функций в теле функции обратного вызова?
Цитата
Цитата
Олег написал: Каков формат возвращаемых значений для функций: long __stdcall TRANS2QUIK_ORDER_EXTENDED_FLAGS (intptr_t nOrderDescriptor) – возвращает расширенные флаги заявки; long __stdcall TRANS2QUIK_ORDER_EXEC_TYPE (intptr_t nOrderDescriptor) – возвращает тип исполнения заявки; «0» – значение не задано;
Функции возвращают обычное десятичное число, которое если преобразовать в двоичный вид, каждое число (0 или 1) которого будет что-то означать. Из максимального long значимы только первые 1023, остальные, если и есть, означают служебную информацию.
Так что означают конкретные флаги (0 или 1) в этом двоичном коде для обоих функций?
Цитата
Цитата
Олег написал: long TRANS2QUIK_API __stdcall TRANS2QUIK_START_TRADES(TRANS2QUIK_TRADE_STATUS_CALLBACK pfnTradeStatusCallback); (для этой функции в описании написано void, а в примере long)
В данном конкретном случае, никакой разницы нет.
Соответствуют ли возвращаемые значения пункту 6.12.3 ( Константы) из руководства пользователя?
Олег написал: В руководстве пользователя функция void __stdcall TRANS2QUIK_TRANSACTION_REPLY_CALLBACK(long nTransactionResult, long nTransactionExtendedErrorCode, long nTransactionReplyCode, DWORD dwTransId, insigned__int64 dOrderNum, LPSTR lpstrTransactionReplyMessage, intptr_t transReplyDescriptor) последним параметром имеет дескриптор.
В примерах для API_Tester_DLG.exe и в прототипе функции typedef void (__stdcall *TRANS2QUIK_TRANSACTION_REPLY_CALLBACK) (long nTransactionResult, long nTransactionExtendedErrorCode, long nTransactionReplyCode, DWORD dwTransId, double dOrderNum, LPCSTR lpcstrTransactionReplyMessage); из trans2quik_api.h параметр дескриптора отсутствует.
Как получить этот дескриптор для доступа к вызову специальных функций в теле функции обратного вызова?
Возможно там правильно работают и вышеназванные функции: long __stdcall TRANS2QUIK_ORDER_WITHDRAW_TIME (intptr_t nOrderDescriptor) – возвращает время снятия заявки; (в API_Tester_DLG.exe возвращает 0 при снятии заявки вручную) long __stdcall TRANS2QUIK_ORDER_EXPIRY (intptr_t nOrderDescriptor) – возвращает дату окончания срока действия заявки;(в API_Tester_DLG.exe возвращает -1) (в API_Tester_DLG.exe возвращает 0 также WDDate, WDTimeMicrosec).
Мы не смогли повторить ситуацию, когда функция TRANS2QUIK_ORDER_WITHDRAW_TIME всегда возвращает 0 для снятых заявок. Что касается функции TRANS2QUIK_ORDER_EXPIRY, то результат ее выполнения следует трактовать следующим образом: 0 - это заявка до отмены(в таблице заявок в поле "Срок" отображается "До отмены"), -1 - это заявка текущей сессии(в таблице заявок в поле "Срок" пусто) иначе это дата в формате YYYYMMDD до которой заявка активна.
Олег написал: В руководстве пользователя функция void __stdcall TRANS2QUIK_TRANSACTION_REPLY_CALLBACK(long nTransactionResult, long nTransactionExtendedErrorCode, long nTransactionReplyCode, DWORD dwTransId, insigned__int64 dOrderNum, LPSTR lpstrTransactionReplyMessage, intptr_t transReplyDescriptor) последним параметром имеет дескриптор.
В примерах для API_Tester_DLG.exe и в прототипе функции typedef void (__stdcall *TRANS2QUIK_TRANSACTION_REPLY_CALLBACK) (long nTransactionResult, long nTransactionExtendedErrorCode, long nTransactionReplyCode, DWORD dwTransId, double dOrderNum, LPCSTR lpcstrTransactionReplyMessage); из trans2quik_api.h параметр дескриптора отсутствует.
Как получить этот дескриптор для доступа к вызову специальных функций в теле функции обратного вызова?
Цитата
Цитата
Олег написал: Каков формат возвращаемых значений для функций: long __stdcall TRANS2QUIK_ORDER_EXTENDED_FLAGS (intptr_t nOrderDescriptor) – возвращает расширенные флаги заявки; long __stdcall TRANS2QUIK_ORDER_EXEC_TYPE (intptr_t nOrderDescriptor) – возвращает тип исполнения заявки; «0» – значение не задано;
Функции возвращают обычное десятичное число, которое если преобразовать в двоичный вид, каждое число (0 или 1) которого будет что-то означать. Из максимального long значимы только первые 1023, остальные, если и есть, означают служебную информацию.
Так что означают конкретные флаги (0 или 1) в этом двоичном коде для обоих функций?
Цитата
Цитата
Олег написал: long TRANS2QUIK_API __stdcall TRANS2QUIK_START_TRADES(TRANS2QUIK_TRADE_STATUS_CALLBACK pfnTradeStatusCallback); (для этой функции в описании написано void, а в примере long)
В данном конкретном случае, никакой разницы нет.
Соответствуют ли возвращаемые значения пункту 6.12.3 ( Константы) из руководства пользователя?
Здравствуйте. Описанная в данном инциденте ошибка была исправлена в версии 7.27.2 терминала QUIK. Приносим извинения за причиненные неудобства.