Я вызываю функции из неуправляемой DLL в C #.И один из моих звонков на эту DLL работает.Но у другого есть более продвинутые параметры, и когда я выполняю функцию в моем коде C #:
[DllImport("IOLUSBIF20.dll", CallingConvention = CallingConvention.StdCall)]
public static extern long IOL_SetTransparentModeExt(long Handle, UInt32 Port, ref TTransparentParameters pTransparentParameters);
, я получаю следующую ошибку:
"PInvokeStackImbalance": "вызовв функцию PInvoke 'Интерфейс устройства IO-Link! IO_Link_Device_Interface.IOLUSBIF20Wrapper :: IOL_SetTransparentModeExt' имеет несбалансированный стек. Это, вероятно, потому, что управляемая подпись PInvoke не соответствует неуправляемой целевой подписи. Проверьте, что соглашение о вызовах и параметры подписи PInvoke совпадаютцелевая неуправляемая подпись. "
В заголовке подпись функции (и структуры) определяется следующим образом:
LONG __stdcall IOL_SetTransparentModeExt(LONG Handle, DWORD Port, TTransparentParameters * pTransparentParameters);
typedef struct TTransparentParametersStruct
{
BYTE StartPattern[16]; /**< starting pattern */
BYTE ReturnPattern[32]; /**< returning pattern */
} TTransparentParameters;
Структура, которую я передаю в качестве аргументаВыглядит следующим образом:
[StructLayout(LayoutKind.Sequential)]
public struct TTransparentParameters
{
public Byte[] StartPattern; /**< starting pattern */
public Byte[] ReturnPattern; /**< returning pattern */
}