Пример использования библиотеки CscLink.dll в С# 2010
Структура данных операции
Код:
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi)]
public struct strTTransactionInfo
{
public ushort Size; // Size of TTransactionInfo - заполнить перед вызовом
public ushort Kind; // 0-оплата 1-скидка 2-бонус 3-потраты гостя
public long Summa; // сумма в копейках
public ushort RestCode; // код ресторана
public int LogDate; // дата чека (0 -> 30/12/1899)
public byte UnitNum; // номер кассы
public int CheckNo; // номер чека
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
public byte[] Array; //комментарий - для ручных транзакций
}
Объявление функции
Код:
public const string DllName = "CscLink.dll";
// Авторизация
[DllImport(DllName, CallingConvention = CallingConvention.StdCall, EntryPoint = "Login")]
public static extern Boolean Login(string AUser, string APsw);
// Последняя ошибка
[DllImport(DllName, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetErrorText")]
public static extern String GetErrorText();
// Номер счета
[DllImport(DllName, CallingConvention = CallingConvention.StdCall, EntryPoint = "GetAccountNumber")]
public static extern Boolean GetAccountNumber(Int64 Card, out int Account);
//{осуществить кассовую транзакцию. Summa > 0 - прямое действие, Summa < 0 - отмена}
//Function CashTransaction( Account: Integer; const Info: TTransactionInfo ): BOOL; stdcall;
[DllImport(DllName, CallingConvention = CallingConvention.StdCall, EntryPoint = "CashTransaction")]
public static extern Boolean CashTransaction(int Account, ref strTTransactionInfo Info);
ну и сам код где добавляем потрату для дисконтной карты
Код:
string msg;
strTTransactionInfo ttr = new strTTransactionInfo();
Login("1", "1");
int Acc=0;
GetAccountNumber(514, out Acc);
MessageBox.Show(Acc.ToString(), " ", MessageBoxButtons.OK);
msg = GetErrorText().ToString();
if (msg.Trim()!="")
{
MessageBox.Show(msg, " ", MessageBoxButtons.OK);
}
// Size of TTransactionInfo - заполнить перед вызовом
ttr.Kind=3; // 0-оплата 1-скидка 2-бонус 3-потраты гостя
ttr.Summa=999; // сумма в копейках
ttr.RestCode=1; // код ресторана
ttr.LogDate=1; // дата чека (0 -> 30/12/1899)
ttr.UnitNum=Convert.ToByte(1); // номер кассы
ttr.CheckNo=3; // номер чека
ttr.Size = (ushort)Marshal.SizeOf(ttr); //Convert. (sizeof(strTTransactionInfo));
MessageBox.Show(CashTransaction(Acc, ref ttr).ToString(), " ", MessageBoxButtons.OK);
msg = GetErrorText().ToString();
if (msg.Trim()!="")
{
MessageBox.Show(msg, " ", MessageBoxButtons.OK);
}
P.S. Немного некрасиво, но как пример думаю сойдет.