Вот код обертки 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());
}



One Response to “Trans2Quik C# API Wrapper”  

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


Leave a Reply