Использование DLL, написанной на delphi - C#

Узнай цену своей работы

Формулировка задачи:

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

Тип указанного массива не совпадает с ожидаемым

Помогите разобраться, а то уже голова пухнет.

Решение задачи: «Использование DLL, написанной на delphi»

textual
Листинг программы
  1. [StructLayout(LayoutKind.Sequential, Pack = 1)]
  2. public struct TTransactionInfo
  3. {
  4.     public ushort Size;    // Size of TTransactionInfo - заполнить перед вызовом
  5.     public ushort Kind;    // 0-оплата 1-скидка 2-бонус 3-потраты гостя
  6.     public long Summa;    // сумма в копейках
  7.     public ushort RestCode;    // код ресторана
  8.     public int LogDate; // дата чека (0 -> 30/12/1899)
  9.     public byte UnitNum;    // номер кассы
  10.     public int CheckNo; // номер чека
  11.     [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)]
  12.     public byte[] Array; //комментарий - для ручных транзакций
  13. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут