Mrreivax
Messages postés100Date d'inscriptionmercredi 9 juin 2004StatutMembreDernière intervention26 juin 2010
-
4 nov. 2006 à 00:02
TMONOD
Messages postés256Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention 6 novembre 2009
-
4 nov. 2006 à 11:50
Quan j'exécute le code ci-dessous, il y a une erreur au niveau de GetCaretPos(xyPOS)...
Je pige pas pourquoi, il me dit:
"Un appel à la fonction PInvoke 'WindowsApplication1!WindowsApplication1.Form1::GetCaretPos' 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."
Public
Structure POINTAPI
Dim x
As Int32
Dim y
As Int32
End
Structure
Public
Declare
Function GetCaretPos
Lib
"user32" (
ByVal lpPoint
As POINTAPI)
As
Long
Private
Sub RichTextBox1_KeyDown(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.KeyEventArgs)
Handles RichTextBox1.KeyDown
Dim xyPOS
As POINTAPI
GetCaretPos(xyPOS) '<= Erreur... Why??
Me.Text = xyPOS.x &
" ; " & xyPOS.y
End
SubMais pourqoi??? Si quelqu'un a la réponse... Merci!!!
TMONOD
Messages postés256Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention 6 novembre 20091 4 nov. 2006 à 09:47
Salut,
La signature d'une fonction c'est :
- Le nombre de paramètres passés, leur type, leur ordre et leur mode (byref, byval))
- Le type de la valeur renvoyée en final.
Ton programme passe ta variable XYpos en paramètre et tu attend que cette fonction modifie ta variable pour que tu l'utilise par la suite, tu dois donc la passer byref
pour que l'api puisse la modifier.
BOOL GetCaretPos(
LPPOINT lpPoint // address of structure to receive coordinates
);
...tu vois c'est marqué dans win32.hlp , c'est que c'est vrai !!