Trans2Quik C# API Wrapper

04Сен08

Вот код обертки API для выставления заявок TRANS2QUIK.DLL.

Пока реализован только метод Connect(), но все экспортные функции доступны.

+ небольшой пример как использовать CallBack функции.

public enum T2QResult
{
Success = 0,
Failed = 1,
QuikTerminalNotFound = 2,
DllVersionNotSupported = 3,
DllAlreadyConnectedToQuik = 4,
WrongSyntax = 5,
QuikNotConnected = 6,
DllNotConnected = 7,
QuikConnected = 8,
QuikDisconnected = 9,
DllConnected = 10,
DllDisconnected = 11,
MemoryAllocationError = 12,
WrongConnectionHandle = 13,
WrongInputParams = 14
}

public static class Trans2Quik
{
#region DLL Import
[DllImport("TRANS2QUIK.dll")]
public static extern int TRANS2QUIK_CONNECT
(
String lpcstrConnectionParamsString,
out Int32 pnExtendedErrorCode,
[MarshalAs(UnmanagedType.LPStr)] StringBuilder lpstrErrorMessage,
UInt32 dwErrorMessageSize
);

[DllImport("TRANS2QUIK.dll")]
public static extern int TRANS2QUIK_DISCONNECT
(
out Int32 pnExtendedErrorCode,
[MarshalAs(UnmanagedType.LPStr)] StringBuilder lpstrErrorMessage,
UInt32 dwErrorMessageSize
);

[DllImport("TRANS2QUIK.dll")]
public static extern int TRANS2QUIK_IS_QUIK_CONNECTED
(
out Int32 pnExtendedErrorCode,
[MarshalAs(UnmanagedType.LPStr)] StringBuilder lpstrErrorMessage,
UInt32 dwErrorMessageSize
);

[DllImport("TRANS2QUIK.dll")]
public static extern int TRANS2QUIK_IS_DLL_CONNECTED
(
out Int32 pnExtendedErrorCode,
[MarshalAs(UnmanagedType.LPStr)] StringBuilder lpstrErrorMessage,
UInt32 dwErrorMessageSize
);

[DllImport("TRANS2QUIK.dll")]
static extern int TRANS2QUIK_SEND_SYNC_TRANSACTION
(
String lpstTransactionString,
out Int32 pnReplyCode,
out UInt32 pdwTransId,
out Double pdOrderNum,
[MarshalAs(UnmanagedType.LPStr)] StringBuilder lpstrResultMessage,
UInt32 dwResultMessageSize,
out Int32 pnExtendedErrorCode,
[MarshalAs(UnmanagedType.LPStr)] StringBuilder lpstErrorMessage,
UInt32 dwErrorMessageSize
);

[DllImport("TRANS2QUIK.dll")]
static extern int TRANS2QUIK_SEND_ASYNC_TRANSACTION
(
String lpstTransactionString,
out Int32 pnExtendedErrorCode,
[MarshalAs(UnmanagedType.LPStr)] StringBuilder lpstErrorMessage,
UInt32 dwErrorMessageSize
);

public delegate void TRANS2QUIK_CONNECTION_STATUS_CALLBACK
(
Int32 nConnectionEvent,
Int32 nExtendedErrorCode,
String lpstrInfoMessage
);

[DllImport("TRANS2QUIK.dll")]
public static extern int TRANS2QUIK_SET_CONNECTION_STATUS_CALLBACK
(
TRANS2QUIK_CONNECTION_STATUS_CALLBACK ConnStatusCallBack,
out Int32 pnExtendedErrorCode,
[MarshalAs(UnmanagedType.LPStr)] StringBuilder lpstErrorMessage,
UInt32 dwErrorMessageSize
);

public delegate void TRANS2QUIK_TRANSACTION_REPLY_CALLBACK
(
Int32 nTransactionResult,
Int32 nTransactionExtendedErrorCode,
Int32 nTransactionReplyCode,
UInt32 dwTransId,
Double dOrderNum,
String lpstrTransactionReplyMessage
);

[DllImport("TRANS2QUIK.dll")]
public static extern int TRANS2QUIK_SET_TRANSACTIONS_REPLY_CALLBACK
(
TRANS2QUIK_TRANSACTION_REPLY_CALLBACK TransCallBack,
out Int32 pnExtendedErrorCode,
[MarshalAs(UnmanagedType.LPStr)] StringBuilder lpstErrorMessage,
UInt32 dwErrorMessageSize
);
#endregion

public static T2QResult Connect(string QuikDirectory)
{
int ErrCode = 0;
StringBuilder sb = new StringBuilder(256);
int res = TRANS2QUIK_CONNECT(QuikDirectory, out ErrCode, sb, 256);

switch (res)
{
case (int)T2QResult.Success:
return T2QResult.Success;

case (int) T2QResult.QuikTerminalNotFound:
return T2QResult.QuikTerminalNotFound;

case (int) T2QResult.DllVersionNotSupported:
return T2QResult.DllVersionNotSupported;

case (int) T2QResult.DllAlreadyConnectedToQuik:
return T2QResult.DllAlreadyConnectedToQuik;

default:
throw new BrokerException(sb.AppendFormat(" ErrorCode: {0}", ErrCode).ToString());
}
}
}

Пример как установить CallBack функции для статуса сервера.

//Описывает функцию обратного вызова
public void SendTransactionReply (
Int32 nTransactionResult,
Int32 nTransactionExtendedErrorCode,
Int32 nTransactionReplyCode,
UInt32 dwTransId,
Double dOrderNum,
String lpstrTransactionReplyMessage)
{
QDebugger.Trace("TransCallBackReply", lpstrTransactionReplyMessage);
}

//Устанавливаем соединение и функцию обратного вызова

string connstr = Args.ToString();
T2QResult ret = Trans2Quik.Connect(connstr);

if (ret == T2QResult.Success || !CallBacksSet)
{
int er = 0;
StringBuilder sb = new StringBuilder(256);

er = 0;
StringBuilder sb2 = new StringBuilder(256);
r = Trans2Quik.TRANS2QUIK_SET_CONNECTION_STATUS_CALLBACK(
new Trans2Quik.TRANS2QUIK_CONNECTION_STATUS_CALLBACK(ServerStatusChanged),
out er,
sb2,
256);

if (r != (int)T2QResult.Success) throw new Exception(sb.ToString());
}

Реклама


9 Responses to “Trans2Quik C# API Wrapper”

  1. Сорри за офф-топ, не подскажете, где мона такой же симпатичный шаблон для блога взять?

  2. Хорошая статья. Действительно было интересно почитать. Не часто такое и встречается та.Наверное стоит подписаться на ваше RSS

  3. 3 Андрей

    Я только недавно стал изучать С# и никак разобраться не могу вот в чем.
    Пытаясь прикрепить к проекту ссылку на TRANS2QUIK.dll, выдает ошибку что библиотека не может быть прикреплена или не указана в проекте (using trans2quik;), хотя она указана. Кстати еще ругается на функцию DllImport. А вот эта же библиотека в вашей обертке прикрепляется, но не знаю как с ней работать. Да и вообще удивился, что в примерах, использование данной библиотеки нигде не указано в коде и к проекту ссылки на нее нет.
    Поведайте плз, каким образом тогда мой проект узнает где эта библиотека находится?
    Может я просто что-то пропустил, но в любом случае не судите строго)

  4. Приветствую,
    эту либу не нужно запускать через using, она подцепляется динамически. Единственное она должна быть в папке с программой которая к ней обращается.


    То что ругается на [DllImport(«TRANS2QUIK.dll»)]
    значить пропущен какой-то reference (using …..), проверить можно в VisualStudio правой кнопкой по DllImport, выбрать пункт меню Resolve…

  5. 5 Андрей

    Большое спасибо за напутствие.
    Действительно пропустил using System.Runtime.InteropServices;
    Сейчас поидее все заработало.

  6. http://deps64.narod2.ru Антивирус. Dr.Web Enterprise Suite. Комплексная защита
    Комплексная защита корпоративных сетей от интернет-угроз

  7. http://mert635.narod2.ru Предлагаем програмное защита для диагностики систем персонального компьютера.

  8. 8 Алексей

    А где ссылка для скачивания библиотеки???


  1. 1 Seo zen

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s


%d такие блоггеры, как: