DLLImport -> comment gérer un manche en C#

dans mon code C# je veux importer une DLL C++. J'utilise le dllimport et il fonctionne très bien avec un certaines fonctions. Mais dans une fonction je obtenir une POIGNÉE dont j'ai besoin plus tard pour appeler une autre fonction.

   [DllImport("SiUSBXp.dll")]
   public static extern int SI_Open(UInt32 deviceNum,ref IntPtr devHandle );   //this function gets the HANDLE
   [DllImport("SiUSBXp.dll")]
   public static extern int SI_Write([In]IntPtr devHandle, [In, Out] byte[] inputByte, UInt32 size,ref UInt32 bytesWritten); //this function needs the HANDLE

Dans mon code de ces fonctions sont appelées comme ceci:

   IntPtr devHandle = new IntPtr();
   UInt32 bytesWritten = new UInt32();
   byte[] byteArr = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
   SI_Open(0, ref devHandle);
   SI_Write(devHandle, byteArr, 10, ref bytesWritten);

Si je fais comme ça, je reçois un "Système.AccessViolationException". J'ai cherché ici et sur internet, mais il n'a pas trouver une réponse précise. Comment puis-je utiliser le IntPtr correctement, de sorte qu'il fonctionne?
En Ce Qui Concerne Meilleur

Toby

  • Quelle est la fonction C++ prototypes pour SI_Open et SI_Write ressembler?
  • Vous êtes initialisation du tableau d'octets à 10 éléments, mais est-ce suffisant pour le SI_Write fonction?
  • SI_STATUS WINAPI SI_Open( DWORD dwDevice, la POIGNÉE* cyHandle );
  • SI_STATUS WINAPI SI_Write( POIGNÉE cyHandle, LPVOID lpBuffer, DWORD dwBytesToWrite, LPDWORD lpdwBytesWritten );
  • Pour le tableau d'octets => il actuall travaillé avec le "même" tableau dans le Code C++. Aussi j'ai essayé quelque chose -> j'ai initialisé un IntPtr comme ce "IntPtr Test = new IntPtr()" - Lorsque j'appelle la fonction d'Écriture avec cette IntPtr il ne marche pas lever une exception...donc en fait je pense que l'erreur est liée à la IntPtr
InformationsquelleAutor Toby | 2011-05-08