Александр, прошу более подробно пояснить. У меня не запускается метод order_status_callback_impl.
Я предоставлю код ниже (реализовано на С#)
//Запускаю создание списка инструментов
_trans.subscrb_orders("","")
//Создаю экземпляр order_callback и передаю в него указатель на функция обратного вызова order_status_callback_impl
TransToQuik.order_status_callback order_callback = new TransToQuik.order_status_callback(TransToQuik.order_status_callback_impl);
//Запускаю начало получения статуса
_trans.start_ord(order_callback);
Вроде все правильно. Теперь подробнее опишу методы :
Метод order_status_callback:
public delegate void order_status_callback(
Int32 nMode,
Int32 dwTransID,
Double dNumber,
[MarshalAs(UnmanagedType.LPStr)]string ClassCode,
[MarshalAs(UnmanagedType.LPStr)]string SecCode,
Double dPrice,
Int32 nBalance,
Double dValue,
Int32 nIsSell,
Int32 nStatus,
Int32 nOrderDescriptor);
[DllImport("TRANS2QUIK.DLL", EntryPoint = "_TRANS2QUIK_START_ORDERS@4", CallingConvention = CallingConvention.StdCall)]
static extern Int32 start_orders(
order_status_callback pfOrderStatusCallback);
public void start_ord(order_status_callback order_callback)
{
assist.writeData("Запускаем процесс получения статуса отправленных заявок", "log");
start_orders(order_callback);
}
Далее Вы говорите выводить статус заявки в методе order_status_callback_impl
Вот этот метод:
public static void order_status_callback_impl(
Int32 nMode, Int32 dwTransID, Double dNumber, string ClassCode, string SecCode,
Double dPrice, Int32 nBalance, Double dValue, Int32 nIsSell, Int32 nStatus, Int32 nOrderDescriptor)
{
assistStatic.writeData("OLOLOL в колбэке", "log");
String mainString = "Mode=" + nMode + " TransId=" + dwTransID + " Num=" + dNumber +
" Class=" + ClassCode + " Sec=" + SecCode + " Price=" + dPrice +
" Balance=" + nBalance + " Value=" + dValue + " IsSell=" + nIsSell + " Status=" + nStatus;
String addString = "";
String strString = "";
addString = " Qty=" + TRANS2QUIK_ORDER_QTY(nOrderDescriptor) +
" Date=" + TRANS2QUIK_ORDER_DATE(nOrderDescriptor) +
" Time=" + TRANS2QUIK_ORDER_TIME(nOrderDescriptor) +
" TimeMicroSec=" + TRANS2QUIK_ORDER_DATE_TIME(nOrderDescriptor, ORDER_MICROSEC) +
" ActTime=" + TRANS2QUIK_ORDER_ACTIVATION_TIME(nOrderDescriptor) +
" WDDate=" + TRANS2QUIK_ORDER_DATE_TIME(nOrderDescriptor, ORDER_WITHDRAW_QUIKDATE) +
" WDTime=" + TRANS2QUIK_ORDER_WITHDRAW_TIME(nOrderDescriptor) +
" WDTimeMicrosec=" + TRANS2QUIK_ORDER_DATE_TIME(nOrderDescriptor, ORDER_WITHDRAW_MICROSEC) +
" Expiry=" + TRANS2QUIK_ORDER_EXPIRY(nOrderDescriptor) +
" Accruedint=" + TRANS2QUIK_ORDER_ACCRUED_INT(nOrderDescriptor) +
" Yield=" + TRANS2QUIK_ORDER_YIELD(nOrderDescriptor) +
" UID=" + TRANS2QUIK_ORDER_UID(nOrderDescriptor) +
" VisibleQty=" + TRANS2QUIK_ORDER_VISIBLE_QTY(nOrderDescriptor) +
" Period=" + TRANS2QUIK_ORDER_PERIOD(nOrderDescriptor) +
" OrderFileTime=" + DateTimeStr(TRANS2QUIK_ORDER_FILETIME(nOrderDescriptor)) +
" WithdrawFileTime=" + DateTimeStr(TRANS2QUIK_ORDER_WITHDRAW_FILETIME(nOrderDescriptor));
try
{
assistStatic.writeData("OLOLOL в колбэке", "log");
strString = ""
+ " USERID=" + TRANS2QUIK_ORDER_USERID(nOrderDescriptor)
+ " Account=" + TRANS2QUIK_ORDER_ACCOUNT(nOrderDescriptor)
+ " Brokerref=" + TRANS2QUIK_ORDER_BROKERREF(nOrderDescriptor)
+ " ClientCode=" + TRANS2QUIK_ORDER_CLIENT_CODE(nOrderDescriptor)
+ " Firmid=" + TRANS2QUIK_ORDER_FIRMID(nOrderDescriptor)
;
}
catch (AccessViolationException e)
{
assistStatic.writeData(e.ToString(), "log");
assistStatic.writeData("OLOLOL в колбэке", "log");
}
try
{
assistStatic.writeData("OLOLOL в колбэке", "log");
var mes = mainString + addString + strString;
assistStatic.writeData("ORDER_CALLBACK: " + mes, "log");
//Первоначальная заявка или нет
assistStatic.writeData("/n" + "Признак того, идет ли начальное получение заявок или нет:" + "/n", "log");
if (nMode == 0){
assistStatic.writeData("/n" + "Новая заявка" + "/n", "log");
}
else if (nMode == 1){
assistStatic.writeData("/n" + "Идет начальное получение заявок" + "/n", "log");
}
else if (nMode == 2){
assistStatic.writeData("/n" + "Получена последняя заявка из начальной рассылки" + "/n", "log");
}
//Статус заявки
assistStatic.writeData("/n" + "Состояние исполнения заявки:" + "/n", "log");
if (nStatus == 1)
{
assistStatic.writeData("/n" + "Активна" + "/n", "log");
}
else if (nStatus == 2)
{
assistStatic.writeData("/n" + "Снята" + "/n", "log");
}
else
{
assistStatic.writeData("/n" + "Исполнена" + "/n", "log");
}
}
catch (System.Exception e)
{
assistStatic.writeData(e.Message, "log");
assistStatic.writeData("OLOLOL в колбэке", "log");
}
//return nStatus;
}
и у меня ничего не выводится.
Подскажите, пожалуйста, что я не так делаю