Использование DLL, написанной на delphi - C#
Формулировка задачи:
Есть DLL CscLink.dll, но описание к ней на delphi
Так как в delphi "0", пытаюсь использовать в C#.
Ряд функци уже реализовал из библиотеки, а вот с некоторыми проблема
Так вот сам вопрос. Есть функция
на delphi
на C#
И соответственно пользовательский тип данных
на delphi
Решил перенести как структуру на C#
объявляю
перед вызовом функции заполняю поля
определяю размерность массива символов
но на вызове функции вылетает ошибка
Листинг программы
- Function CashTransaction( Account: Integer; const Info: TTransactionInfo ): BOOL; stdcall;
Листинг программы
- [DllImport(DllName, CallingConvention = CallingConvention.StdCall, EntryPoint = "CashTransaction")]
- public static extern Boolean CashTransaction(int Account, strTTransactionInfo TTransactionInfo);
Листинг программы
- type
- TTransactionInfo = packed record
- Size : Word; // Size of TTransactionInfo - заполнить перед вызовом
- Kind : Word; // 0-оплата 1-скидка 2-бонус 3-потраты гостя
- Summa : Comp; // сумма в копейках
- RestCode : Word; // код ресторана
- LogDate : Integer; // дата чека (0 -> 30/12/1899)
- UnitNum : Byte; // номер кассы
- CheckNo : Integer; // номер чека
- Comment : Array[0..255] of Char; //комментарий - для ручных транзакций
- end;
Листинг программы
- public struct strTTransactionInfo
- {
- public ushort Size; // Size of TTransactionInfo - заполнить перед вызовом
- public ushort Kind; // 0-оплата 1-скидка 2-бонус 3-потраты гостя
- public Decimal Summa; // сумма в копейках
- public ushort RestCode; // код ресторана
- public int LogDate; // дата чека (0 -> 30/12/1899)
- public Byte UnitNum; // номер кассы
- public int CheckNo; // номер чека
- public char[] Array; //комментарий - для ручных транзакций
- }
Листинг программы
- strTTransactionInfo ttr= new strTTransactionInfo();
Листинг программы
- ttr.Array = new char[255];
Тип указанного массива не совпадает с ожидаемым
Помогите разобраться, а то уже голова пухнет.Решение задачи: «Использование DLL, написанной на delphi»
textual
Листинг программы
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- public struct TTransactionInfo
- {
- 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; //комментарий - для ручных транзакций
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д