Взгляните на это.Функциональность существует с 1.1, поэтому она должна охватывать любую версию .NET, которую вы используете.Вам просто нужно указать CallingConvention.
Документация CallingConvention на MSDN
Вы также можете посмотреть эту статью о проекте кода:
Использование соглашения о вызовах _CDECL в C #
РЕДАКТИРОВАТЬ: Кроме того, вот пример из FreeImage.NET.
static FreeImage_OutputMessageFunction freeimage_outputmessage_proc = NULL;
DLL_API void DLL_CALLCONV
FreeImage_SetOutputMessage(FreeImage_OutputMessageFunction omf);
Затем на стороне C # просто:
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void FreeImage_OutputMessageFunction(FREE_IMAGE_FORMAT
format, string msg);
[DllImport(dllName, EntryPoint="FreeImage_SetOutputMessage")]
public static extern void SetOutputMessage(FreeImage_OutputMessageFunction
omf);