Echa un vistazo a esto. La funcionalidad ha estado presente desde 1.1, por lo que debería cubrir cualquier versión de .NET que esté utilizando. Solo tiene que especificar CallingConvention.
CallingConvention Documenation at MSDN
También puede buscar en este artículo sobre Proyecto de Código:
Using the _CDECL calling convention in C#
EDIT: Además, aquí es un ejemplo de FreeImage.NET.
static FreeImage_OutputMessageFunction freeimage_outputmessage_proc = NULL;
DLL_API void DLL_CALLCONV
FreeImage_SetOutputMessage(FreeImage_OutputMessageFunction omf);
Luego, en el # lateral C, simplemente:
[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);
¿Estás tratando de crear una 'devolución de llamada Cdecl' en C# (es decir, una función' Cdecl' que el código no administrado puede llamar), o es usted tratando de llamar a una función no controlada (es decir, C nativa) 'Cdecl' de C#? –