Maintenant, je souhaite l'utiliser dans C#.
Pour l'utiliser à partir de C# :
[ DllImport( s_UtiPInvoke )]
private static extern uint Utcnvfct (CNVPARM1 prm, StringBuilder buf_utcc, StringBuilder buf_extd);
// StringBuilder car ce sont des strings en entrée/sortie
[ StructLayout( LayoutKind.Sequential)]
public struct CNVPARM1
{
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=64 )]
public string cnv_name;
[ MarshalAs( UnmanagedType.U8 )]
public uint lgd_utcc;
[ MarshalAs( UnmanagedType.U8 )]
public uint lgd_phys;
[ MarshalAs( UnmanagedType.U8 )]
public uint lgd_maxi;
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=16 )]
public string cnv_retc;
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=16 )]
public string cnv_info;
[ MarshalAs( UnmanagedType.U8 )]
public uint cnv_errp;
}
J'ai mis uint mais ceci déclenche une erreur (System.TypeLoadException: Cannot marshal field 'lgd_utcc' of type 'eid.o500.uti.CNVPARM1': Invalid managed/unmanaged type combination (Int32/UInt32 must be paired with I4, U4, or Error) donc j'ai à la place mis ulong et ca n'émet plus d'exception.