je fais un wrapper pour lire TDM et les fichiers TDMS mais j'ai un problèmeWrapper C# en utilisant dll non géré
[DllImport(lib, CharSet = CharSet.Auto)]
static extern int DDC_OpenFileEx(
[MarshalAs(UnmanagedType.LPStr)]
string filePath,
[MarshalAs(UnmanagedType.LPStr)]
string fileType,
int read_only,
ref long file);
fonctionne très bien, mais
[DllImport(lib, CharSet = CharSet.Auto, SetLastError = true)]
static extern int DDC_GetNumChannelGroups(long file,
[MarshalAs(UnmanagedType.U4)]
ref int numChannelGroups);
int numGru = 0;
errCode = ReadTDM.DDC_GetNumChannelGroups(file,ref numGru);
System.Console.WriteLine("Error Code {0} GetNumChannelGroups", errCode);
donne une erreur -6202, // Une argument non valide a été transmis à la bibliothèque. J'ai essayé ref uint, uint * (dangereux), UIntPtr. Le def du fichier .h
int __stdcall DDC_GetNumChannelGroups (DDCFileHandle file,unsigned int *numChannelGroups);
le deuxième paramètre est le problème. il semble que unsigned int *! = Uint.
Est-ce que quelqu'un a une idée comment appeler cette fonction à partir de la DLL?
http://forums.ni.com/ni/board/message?board.id=60&thread.id=11821
Vous n'avez pas besoin de spécifier 'MarshalAs' dans ces cas particuliers:' LPStr' est la valeur par défaut et 'U4' ne fait rien ici comme' int' et 'uint' sont de la même taille. –
Suppression des attributs est une bonne idée, mais utilisez beaucoup CharSet.Ansi –