[VB2005] Un appel à la fonction PInvoke (..) a déséquilibré la pile !!

Un appel à la fonction PInvoke (..) a déséquilibré la pile !! [VB2005] - C#/.NET managed - Programmation

Marsh Posté le 09-05-2007 à 22:09:55    

Bonjour,
 
Je veux pouvoir ouvrir mon lecteur de CD, n'ayant pas trouvé de fonction sous VB2005, j'utilise une API..car je n'ai pas trouve de fonction intégré sous 2005 me permettant de le faire :/
 
 

Code :
  1. Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
  2.     (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
  3.     ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
  4. Public Function OpenCd(ByVal lecteur As String)
  5.         Return mciSendString(String.Format("set CDAudio!{0} door open", lecteur), Nothing, 127, 0)
  6.     End Function


 
Mon lecteur s'ouvre bien mais quelques seconde aprés j'ai ce message d'erreur là !  
Comment est-ce que je pourrais résoudre mon soucis ? :?  
 
Un appel à la fonction PInvoke 'WindowsApplication5!WindowsApplication5.Fonction::mciSendString' a déséquilibré la pile. Cela peut se produire, car la signature PInvoke managée ne correspond pas à la signature cible non managée. Vérifiez que la convention d'appel et les paramètres de la signature PInvoke correspondent à la signature non managée cible.
 
D'avance merci
@+
Marc


Message édité par cvb le 09-05-2007 à 22:10:50
Reply

Marsh Posté le 09-05-2007 à 22:09:55   

Reply

Marsh Posté le 09-05-2007 à 22:22:25    

ta déclaration P/Invoke de mciSendString est fausse. en .NET, les long font 64 bits, pas 32.
essaie la déclaration suivante :

Code :
  1. Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
  2. (ByVal lpstrCommand As String, ByVal lpstrReturnString As StringBuilder,  ByVal uReturnLength As UInt32, ByVal hwndCallback As IntPtr) As UInt32

Message cité 1 fois
Message édité par Harkonnen le 09-05-2007 à 22:23:29
Reply

Marsh Posté le 09-05-2007 à 22:30:27    

Harkonnen a écrit :

ta déclaration P/Invoke de mciSendString est fausse. en .NET, les long font 64 bits, pas 32.
essaie la déclaration suivante :

Code :
  1. Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
  2. (ByVal lpstrCommand As String, ByVal lpstrReturnString As StringBuilder,  ByVal uReturnLength As UInt32, ByVal hwndCallback As IntPtr) As UInt32



 
 
Merci beaucoup ça fonctionne Nickel  :bounce:  
 
@++

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed