Обращение к *.dll (Delphi) из под C# проекта

Рейтинг: 0Ответов: 0Опубликовано: 12.01.2023

Есть DLL написанная на Delphi.

type
  TReceiveData = procedure(PBuf: Pointer; const Size: LongWord) of object; 
  TResultCode  = (rcOK, rcErrorCore, rcErrorUsed, rcErrorInit, rcErrorParams, rcErrorUnits);

Functions 
  function Init(const AIP: PChar; AReceive: TReceiveData): TResultCode;

При обращении к ней через C# выдает ошибку. Код C# ниже

[DllImport("Sensor.dll", CallingConvention = CallingConvention.StdCall)]
        public static extern TResultCode Init(uint const_IP_dev, block_cb_fn dev_resive_data);
private void btnInit_Click(object sender, EventArgs e)
   {
            var arr = IPAddress.Parse("127.0.0.1");
            adr = 0;
            for (int i = 0; i < arr.GetAddressBytes().Length; i++)
            {
                adr = adr << 8 | arr.GetAddressBytes()[i];
            }
            lbGet.Text = NativeMethods.Init(adr, FCallback).ToString();
   }
private static readonly block_cb_fn FCallback = new block_cb_fn(MethodAvailable);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    public unsafe delegate int block_cb_fn(TReceiveData* ptr);
public unsafe struct TReceiveData
    {
        public byte* PBuf;
        public long Size;    
    }

Ошибку выдает следующую Помощник по отладке управляемого кода "PInvokeStackImbalance" : "Вызов функции PInvoke "VektorTDS!VektorTDS.classes.NativeMethods::Init" разбалансировал стек. Вероятно, это вызвано тем, что управляемая сигнатура PInvoke не совпадает с неуправляемой целевой сигнатурой. Убедитесь, что соглашение о вызовах и параметры сигнатуры PInvoke совпадают с неуправляемой целевой сигнатурой."

Куда копать, или что не правильно?

Ответы

Ответов пока нет.