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

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

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

Есть DLL CscLink.dll, но описание к ней на delphi Так как в delphi "0", пытаюсь использовать в C#. Ряд функци уже реализовал из библиотеки, а вот с некоторыми проблема Так вот сам вопрос. Есть функция на delphi
Function CashTransaction( Account: Integer; const Info: TTransactionInfo ): BOOL; stdcall;
на C#
[DllImport(DllName, CallingConvention = CallingConvention.StdCall, EntryPoint = "CashTransaction")]
public static extern Boolean CashTransaction(int Account, strTTransactionInfo TTransactionInfo);
И соответственно пользовательский тип данных на delphi
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;
Решил перенести как структуру на C#
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; //комментарий - для ручных транзакций
}

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


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

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

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