Использование 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; //комментарий - для ручных транзакций
}