P / Invoke с атрибутом DLLImport также требует, чтобы вы разбирались с маршалингом параметров функции, если она есть, типам CLR. Так, например, DWORD
становится int
, IN HANDLE
может становиться IntPtr
, LPDWORD
становится out int
, LPVOID
обычно может маршалироваться как byte[]
... и т. Д. , Смотрите приличное резюме об этом здесь .
Пример из моего недавнего проекта, в котором мне пришлось взаимодействовать с DLL для старого цифрового блока вывода:
//This function's header in the DLL was:
//BOOL _stdcall fnPerformaxComSendRecv(IN HANDLE pHandle, IN LPVOID wBuffer, IN DWORD dwNumBytesToWrite, IN DWORD dwNumBytesToRead, OUT LPVOID rBuffer);
[DllImport("PerformaxCom.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern bool fnPerformaxComSendRecv(IntPtr pHandle, byte[] wBuffer, int dwNumBytesToWrite, int dwNumBytesToRead, byte[] rBuffer);