Использование дескрипторов сделки и заявки вне CALLBACK функций

Страницы: 1
RSS
Использование дескрипторов сделки и заявки вне CALLBACK функций
 
Через дескрипторы сделки и заявки внутри 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 значащих цифр.
Поэтому смотрю, что можно запихнуть в этот формат напрямую без дополнительных ухищрений.
 
Обладает ли QUIK clients support информацией для ответа на поставленные выше вопросы?
 
Добрый день,

Цитата
Олег написал:
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, возвращаемый функциями.

Каково максимальное значения для:
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 параметр дескриптора отсутствует.

Как получить этот дескриптор для доступа к вызову специальных функций в теле функции обратного вызова?

Цитата
[TABLE][TR][TH]
Цитата[/TH][/TR][TR][TD]Олег написал:
Каков формат возвращаемых значений для функций:
long __stdcall TRANS2QUIK_ORDER_EXTENDED_FLAGS (intptr_t  nOrderDescriptor) – возвращает расширенные флаги заявки;
long __stdcall TRANS2QUIK_ORDER_EXEC_TYPE (intptr_t    nOrderDescriptor) – возвращает тип исполнения заявки; «0» – значение не    задано; [/TD][/TR][/TABLE]Функции возвращают обычное десятичное число, которое если преобразовать в двоичный вид, каждое число (0 или 1) которого будет что-то означать. Из максимального long значимы только первые 1023, остальные, если и есть, означают служебную информацию.
Так что означают конкретные флаги (0 или 1) в этом двоичном коде для обоих функций?

Цитата
[TABLE][TR][TH]Цитата[/TH][/TR][TR][TD]Олег написал:
long TRANS2QUIK_API __stdcall TRANS2QUIK_START_TRADES(TRANS2QUIK_TRADE_STATUS_CALLBACK pfnTradeStatusCallback);
(для этой функции в описании написано void, а в примере long) [/TD][/TR][/TABLE]В данном конкретном случае, никакой разницы нет.
Соответствуют ли возвращаемые значения  пункту 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 параметр дескриптора отсутствует.

Как получить этот дескриптор для доступа к вызову специальных функций в теле функции обратного вызова?
Как можем видеть, в файле trans2quik_api.h полученном по ссылке:
http://arqatech.com/upload/iblock/80a/Trans2QuikAPI_1.3_x64.zip
он есть:
Код
, TransactionReplyDescriptor transReplyDescriptor);

Цитата
Олег написал:
Так что означают конкретные флаги (0 или 1) в этом двоичном коде для обоих функций?
Значения флагов описаны в документации QLUA.chm, в разделе "Описание битовых флагов".
Цитата
Олег написал:
Соответствуют ли возвращаемые значения  пункту 6.12.3 ( Константы) из руководства пользователя?
Да, соответствуют. Относительно указанного Вами пункта:
Цитата
Олег написал:
для этой функции в описании написано void, а в примере long)
Здесь в документации действительно есть неточность. По этому вопросу  проблема изучается. Постараемся в ближайшее время дать ответ.
 
Олег,      Добрый день,
   
    Документация будет приведена в соответствие в одной из очередных     версий.
    Приносим извинения за причиненные неудобства.
 
Цитата
Как можем видеть, в файле trans2quik_api.h полученном по ссылке: http://arqatech.com/upload/iblock/80a/Trans2QuikAPI_1.3_x64.zip
он есть:Код, TransactionReplyDescriptor transReplyDescriptor);

Это для х64. У меня Win7 x32, поэтому пользуюсь http://arqatech.com/upload/iblock/006/Trans2QuikAPI_1.2.rar.
А там дескриптор отсутствует. Описание функций было взято оттуда.

Возможно там правильно работают и вышеназванные функции:
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 до которой заявка активна.

Приносим извинения за причиненные неудобства.
Страницы: 1
Читают тему (гостей: 1)
Наверх