Использование 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; //комментарий - для ручных транзакций }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д