27.04.2015 11:04
Ferus
 
Пример использования библиотеки 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. Немного некрасиво, но как пример думаю сойдет.
Часовой пояс GMT +3, время: 17:04.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.