Salut tout le monde, en ce moment je dois réaliser un wrapper qui me permette d'appeler en C# les fonctions d'une bibliothèque C qui doit me permettre d'obtenir des informations à partir d'un capteur. Pour cela j'utilise P/Invoke du package System.Runtime.InteropServices.
Le prototype de ma fonction C est le suivant :
void disableDevice(unsigned int deviceHandler);
Et évidemment je n'ai pas accès au code source de cette fonction.
Pour utiliser cette fonction en C#, voilà ce que je déclare :
[DllImport("device.dll")]
private static extern void disableDevice(int deviceHandler);
public void Disable() {
disableDevice(this.m_handler);
}
Cela a marché jusqu'à présent pour toutes les fonctions que j'ai eu à appeler en C#, mais ça ne marche pas pour la fonction qui se charge de désactiver le périphérique. Lorsque la méthode Disable() de la classe Device() est appelée, j'obtiens une AccessViolationException qui m'indique que j'ai tenté de modifier un endroit protégé de la mémoire.
Et sincèrement je ne sais pas du tout pourquoi il me lance cette exception, d'autant plus que la doc de la DLL ne parle pas d'éventuels effets de bords de la fonction disableDevice(). Existerait-il un moyen de "déprotéger" la mémoire et qui me permettrait de virer cette AccessViolationException ?