Sauf que en Vb il semble que Null et definit en variant, alors que
mettre comme parametre a la place de Null ? J'ai essayé 0, mais cela ne
passe pas.
Ci dessous la déclaration de ma fonction GetPrivateProfileString,
peut-être que la ligne "ByVal lpKeyName As Any, " n'est pas bonne ?
Private Declare Function GetPrivateProfileString Lib "kernel32" _
Alias "GetPrivateProfileStringA" (
ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String) As Long
Sauf que en Vb il semble que Null et definit en variant, alors que mettre comme parametre a la place de Null ? J'ai essayé 0, mais cela ne passe pas.
As tu essaye vbNull?
-- Pozdrawiam Adam Pietrasiewicz
Zoury
Salut! :O)
Sauf que en Vb il semble que Null et definit en variant, alors que mettre comme parametre a la place de Null ? J'ai essayé 0, mais cela ne passe pas.
utilise la constante vbNullString pour passer une chaine NULL en paramètre à des APIs
Ci dessous la déclaration de ma fonction GetPrivateProfileString, peut-être que la ligne "ByVal lpKeyName As Any, " n'est pas bonne ?
Private Declare Function GetPrivateProfileString Lib "kernel32" _ Alias "GetPrivateProfileStringA" ( ByVal lpApplicationName As String, _ ByVal lpKeyName As Any, _ ByVal lpDefault As String, _ ByVal lpReturnedString As String, _ ByVal nSize As Long, _ ByVal lpFileName As String) As Long
en effet.. As Any est généralement utilisé lorsque le type représente une structure ou un object. On déclare le paramètre *ByRef* avec As Any afin de travaillé avec un pointeur.
Dans ton cas déclare la déclaration devrait être l'une des trois forme ci-dessous : '*** ByRef lpKeyName As Any ' généralement pour les structs 'ou ByRef lpKeyName As Long ' généralement pour les pointeurs (objets et chaines) 'ou ByVal lpKeyName As String ' pour les chaine ASCII (on passe la chaine directement ou encore vbNullString) '***
personnellement j'utiliserais ByVal lpKeyName As String parce que c'est assez standard en VB pour une chaine ASCII (et que les autres paramètres String de ta fonction utilise déjà cette norme).
-- Cordialement Yanick MVP pour Visual Basic
Salut! :O)
Sauf que en Vb il semble que Null et definit en variant, alors que
mettre comme parametre a la place de Null ? J'ai essayé 0, mais cela ne
passe pas.
utilise la constante vbNullString pour passer une chaine NULL en paramètre à
des APIs
Ci dessous la déclaration de ma fonction GetPrivateProfileString,
peut-être que la ligne "ByVal lpKeyName As Any, " n'est pas bonne ?
Private Declare Function GetPrivateProfileString Lib "kernel32" _
Alias "GetPrivateProfileStringA" (
ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, _
ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String) As Long
en effet.. As Any est généralement utilisé lorsque le type représente une
structure ou un object. On déclare le paramètre *ByRef* avec As Any afin de
travaillé avec un pointeur.
Dans ton cas déclare la déclaration devrait être l'une des trois forme
ci-dessous :
'***
ByRef lpKeyName As Any ' généralement pour les structs
'ou
ByRef lpKeyName As Long ' généralement pour les pointeurs (objets et
chaines)
'ou
ByVal lpKeyName As String ' pour les chaine ASCII (on passe la chaine
directement ou encore vbNullString)
'***
personnellement j'utiliserais ByVal lpKeyName As String parce que c'est
assez standard en VB pour une chaine ASCII (et que les autres paramètres
String de ta fonction utilise déjà cette norme).
Sauf que en Vb il semble que Null et definit en variant, alors que mettre comme parametre a la place de Null ? J'ai essayé 0, mais cela ne passe pas.
utilise la constante vbNullString pour passer une chaine NULL en paramètre à des APIs
Ci dessous la déclaration de ma fonction GetPrivateProfileString, peut-être que la ligne "ByVal lpKeyName As Any, " n'est pas bonne ?
Private Declare Function GetPrivateProfileString Lib "kernel32" _ Alias "GetPrivateProfileStringA" ( ByVal lpApplicationName As String, _ ByVal lpKeyName As Any, _ ByVal lpDefault As String, _ ByVal lpReturnedString As String, _ ByVal nSize As Long, _ ByVal lpFileName As String) As Long
en effet.. As Any est généralement utilisé lorsque le type représente une structure ou un object. On déclare le paramètre *ByRef* avec As Any afin de travaillé avec un pointeur.
Dans ton cas déclare la déclaration devrait être l'une des trois forme ci-dessous : '*** ByRef lpKeyName As Any ' généralement pour les structs 'ou ByRef lpKeyName As Long ' généralement pour les pointeurs (objets et chaines) 'ou ByVal lpKeyName As String ' pour les chaine ASCII (on passe la chaine directement ou encore vbNullString) '***
personnellement j'utiliserais ByVal lpKeyName As String parce que c'est assez standard en VB pour une chaine ASCII (et que les autres paramètres String de ta fonction utilise déjà cette norme).
-- Cordialement Yanick MVP pour Visual Basic
Zoury
concernant cette déclaration :
ByRef lpKeyName As Long ' généralement pour les pointeurs (objets et chaines)
c'est faux concernant les chaines.. on pourrait les passé ByVal avec StrPtr() si l'api prend du Unicode..
voici un exemple plus concret sur les façon de passé une chaine à une API : '*** ' Form1 ' 4 TextBoxes ' 1 CommandButton Option Explicit
Private Const WM_SETTEXT As Long = &HC Private Declare Function SendMessageA_LParamByRefAsAny _ Lib "user32" _ Alias "SendMessageA" _ ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByRef lParam As Any _ ) As Long Private Declare Function SendMessageA_LParamByValAsString _ Lib "user32" _ Alias "SendMessageA" _ ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As String _ ) As Long
Private Declare Function SendMessageW_LParamByRefAsAny _ Lib "user32" _ Alias "SendMessageW" _ ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByRef lParam As Any _ ) As Long Private Declare Function SendMessageW_LParamByValAsLong _ Lib "user32" _ Alias "SendMessageW" _ ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long _ ) As Long
Note que si tu *déclares* un paramètre ByRef alors qu'il faut passé la valeur ByVal ça n'affectera rien si tu précises ByVal devant le paramètre lors de l'appel (comme dans l'exemple ci haut) reNote que StrPtr() renvoit le pointeur de la chaine Unicode, par défaut VB renvoit une version ANSI de la chaine, on doit utilise StrPtr() lorsque l'API accepte du Unicode
-- Cordialement Yanick MVP pour Visual Basic
concernant cette déclaration :
ByRef lpKeyName As Long ' généralement pour les pointeurs (objets et
chaines)
c'est faux concernant les chaines.. on pourrait les passé ByVal avec
StrPtr() si l'api prend du Unicode..
voici un exemple plus concret sur les façon de passé une chaine à une API :
'***
' Form1
' 4 TextBoxes
' 1 CommandButton
Option Explicit
Private Const WM_SETTEXT As Long = &HC
Private Declare Function SendMessageA_LParamByRefAsAny _
Lib "user32" _
Alias "SendMessageA" _
( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByRef lParam As Any _
) As Long
Private Declare Function SendMessageA_LParamByValAsString _
Lib "user32" _
Alias "SendMessageA" _
( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As String _
) As Long
Private Declare Function SendMessageW_LParamByRefAsAny _
Lib "user32" _
Alias "SendMessageW" _
( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByRef lParam As Any _
) As Long
Private Declare Function SendMessageW_LParamByValAsLong _
Lib "user32" _
Alias "SendMessageW" _
( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long _
) As Long
Note que si tu *déclares* un paramètre ByRef alors qu'il faut passé la
valeur ByVal ça n'affectera rien si tu précises ByVal devant le paramètre
lors de l'appel (comme dans l'exemple ci haut)
reNote que StrPtr() renvoit le pointeur de la chaine Unicode, par défaut VB
renvoit une version ANSI de la chaine, on doit utilise StrPtr() lorsque
l'API accepte du Unicode
ByRef lpKeyName As Long ' généralement pour les pointeurs (objets et chaines)
c'est faux concernant les chaines.. on pourrait les passé ByVal avec StrPtr() si l'api prend du Unicode..
voici un exemple plus concret sur les façon de passé une chaine à une API : '*** ' Form1 ' 4 TextBoxes ' 1 CommandButton Option Explicit
Private Const WM_SETTEXT As Long = &HC Private Declare Function SendMessageA_LParamByRefAsAny _ Lib "user32" _ Alias "SendMessageA" _ ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByRef lParam As Any _ ) As Long Private Declare Function SendMessageA_LParamByValAsString _ Lib "user32" _ Alias "SendMessageA" _ ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As String _ ) As Long
Private Declare Function SendMessageW_LParamByRefAsAny _ Lib "user32" _ Alias "SendMessageW" _ ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByRef lParam As Any _ ) As Long Private Declare Function SendMessageW_LParamByValAsLong _ Lib "user32" _ Alias "SendMessageW" _ ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long _ ) As Long
Note que si tu *déclares* un paramètre ByRef alors qu'il faut passé la valeur ByVal ça n'affectera rien si tu précises ByVal devant le paramètre lors de l'appel (comme dans l'exemple ci haut) reNote que StrPtr() renvoit le pointeur de la chaine Unicode, par défaut VB renvoit une version ANSI de la chaine, on doit utilise StrPtr() lorsque l'API accepte du Unicode
-- Cordialement Yanick MVP pour Visual Basic
christophe-pasde
Bonjour,
Byval 0
ça marche aussi?
Pour la GDI les API qui accèptent en parametre un pointeur qui peut-être null, je leur passent comme ça et ça marche.
Christophe
Zoury a écrit :
concernant cette déclaration :
ByRef lpKeyName As Long ' généralement pour les pointeurs (objets et chaines)
c'est faux concernant les chaines.. on pourrait les passé ByVal avec StrPtr() si l'api prend du Unicode..
voici un exemple plus concret sur les façon de passé une chaine à une API : '*** ' Form1 ' 4 TextBoxes ' 1 CommandButton Option Explicit
Private Const WM_SETTEXT As Long = &HC Private Declare Function SendMessageA_LParamByRefAsAny _ Lib "user32" _ Alias "SendMessageA" _ ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByRef lParam As Any _ ) As Long Private Declare Function SendMessageA_LParamByValAsString _ Lib "user32" _ Alias "SendMessageA" _ ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As String _ ) As Long
Private Declare Function SendMessageW_LParamByRefAsAny _ Lib "user32" _ Alias "SendMessageW" _ ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByRef lParam As Any _ ) As Long Private Declare Function SendMessageW_LParamByValAsLong _ Lib "user32" _ Alias "SendMessageW" _ ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long _ ) As Long
Note que si tu *déclares* un paramètre ByRef alors qu'il faut passé la valeur ByVal ça n'affectera rien si tu précises ByVal devant le paramètre lors de l'appel (comme dans l'exemple ci haut) reNote que StrPtr() renvoit le pointeur de la chaine Unicode, par défaut VB renvoit une version ANSI de la chaine, on doit utilise StrPtr() lorsque l'API accepte du Unicode
Bonjour,
Byval 0
ça marche aussi?
Pour la GDI les API qui accèptent en parametre un pointeur qui peut-être
null, je leur passent comme ça et ça marche.
Christophe
Zoury a écrit :
concernant cette déclaration :
ByRef lpKeyName As Long ' généralement pour les pointeurs (objets et
chaines)
c'est faux concernant les chaines.. on pourrait les passé ByVal avec
StrPtr() si l'api prend du Unicode..
voici un exemple plus concret sur les façon de passé une chaine à une API :
'***
' Form1
' 4 TextBoxes
' 1 CommandButton
Option Explicit
Private Const WM_SETTEXT As Long = &HC
Private Declare Function SendMessageA_LParamByRefAsAny _
Lib "user32" _
Alias "SendMessageA" _
( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByRef lParam As Any _
) As Long
Private Declare Function SendMessageA_LParamByValAsString _
Lib "user32" _
Alias "SendMessageA" _
( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As String _
) As Long
Private Declare Function SendMessageW_LParamByRefAsAny _
Lib "user32" _
Alias "SendMessageW" _
( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByRef lParam As Any _
) As Long
Private Declare Function SendMessageW_LParamByValAsLong _
Lib "user32" _
Alias "SendMessageW" _
( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long _
) As Long
Note que si tu *déclares* un paramètre ByRef alors qu'il faut passé la
valeur ByVal ça n'affectera rien si tu précises ByVal devant le paramètre
lors de l'appel (comme dans l'exemple ci haut)
reNote que StrPtr() renvoit le pointeur de la chaine Unicode, par défaut VB
renvoit une version ANSI de la chaine, on doit utilise StrPtr() lorsque
l'API accepte du Unicode
Pour la GDI les API qui accèptent en parametre un pointeur qui peut-être null, je leur passent comme ça et ça marche.
Christophe
Zoury a écrit :
concernant cette déclaration :
ByRef lpKeyName As Long ' généralement pour les pointeurs (objets et chaines)
c'est faux concernant les chaines.. on pourrait les passé ByVal avec StrPtr() si l'api prend du Unicode..
voici un exemple plus concret sur les façon de passé une chaine à une API : '*** ' Form1 ' 4 TextBoxes ' 1 CommandButton Option Explicit
Private Const WM_SETTEXT As Long = &HC Private Declare Function SendMessageA_LParamByRefAsAny _ Lib "user32" _ Alias "SendMessageA" _ ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByRef lParam As Any _ ) As Long Private Declare Function SendMessageA_LParamByValAsString _ Lib "user32" _ Alias "SendMessageA" _ ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As String _ ) As Long
Private Declare Function SendMessageW_LParamByRefAsAny _ Lib "user32" _ Alias "SendMessageW" _ ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByRef lParam As Any _ ) As Long Private Declare Function SendMessageW_LParamByValAsLong _ Lib "user32" _ Alias "SendMessageW" _ ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long _ ) As Long
Note que si tu *déclares* un paramètre ByRef alors qu'il faut passé la valeur ByVal ça n'affectera rien si tu précises ByVal devant le paramètre lors de l'appel (comme dans l'exemple ci haut) reNote que StrPtr() renvoit le pointeur de la chaine Unicode, par défaut VB renvoit une version ANSI de la chaine, on doit utilise StrPtr() lorsque l'API accepte du Unicode
Zoury
Salut Christophe! :O)
ça dépend de la déclaration :
- As String -> utilise vbNullString - As Long -> utilise ByVal 0
-- Cordialement Yanick MVP pour Visual Basic
"christophe-pasde<> @wanadoo.fr>" <"christophe-pasde<> a écrit dans le message de news:41c1ed17$0$10230$
Bonjour,
Byval 0
ça marche aussi?
Pour la GDI les API qui accèptent en parametre un pointeur qui peut-être null, je leur passent comme ça et ça marche.
Christophe
Zoury a écrit :
> concernant cette déclaration : > > >>ByRef lpKeyName As Long ' généralement pour les pointeurs (objets et >>chaines) > > > c'est faux concernant les chaines.. on pourrait les passé ByVal avec > StrPtr() si l'api prend du Unicode.. > > voici un exemple plus concret sur les façon de passé une chaine à une
API :
> '*** > ' Form1 > ' 4 TextBoxes > ' 1 CommandButton > Option Explicit > > Private Const WM_SETTEXT As Long = &HC > Private Declare Function SendMessageA_LParamByRefAsAny _ > Lib "user32" _ > Alias "SendMessageA" _ > ( _ > ByVal hwnd As Long, _ > ByVal wMsg As Long, _ > ByVal wParam As Long, _ > ByRef lParam As Any _ > ) As Long > Private Declare Function SendMessageA_LParamByValAsString _ > Lib "user32" _ > Alias "SendMessageA" _ > ( _ > ByVal hwnd As Long, _ > ByVal wMsg As Long, _ > ByVal wParam As Long, _ > ByVal lParam As String _ > ) As Long > > Private Declare Function SendMessageW_LParamByRefAsAny _ > Lib "user32" _ > Alias "SendMessageW" _ > ( _ > ByVal hwnd As Long, _ > ByVal wMsg As Long, _ > ByVal wParam As Long, _ > ByRef lParam As Any _ > ) As Long > Private Declare Function SendMessageW_LParamByValAsLong _ > Lib "user32" _ > Alias "SendMessageW" _ > ( _ > ByVal hwnd As Long, _ > ByVal wMsg As Long, _ > ByVal wParam As Long, _ > ByVal lParam As Long _ > ) As Long > > Private Sub Command1_Click() > > Call SetTextBoxes(Text1.Text) > > End Sub > > Private Sub SetTextBoxes(ByRef sText As String) > > Call SendMessageA_LParamByRefAsAny(Text2.hwnd, WM_SETTEXT, 0, ByVal > sText) > Call SendMessageA_LParamByValAsString(Text3.hwnd, WM_SETTEXT, 0,
sText)
> > Call SendMessageW_LParamByRefAsAny(Text4.hwnd, WM_SETTEXT, 0, ByVal > StrPtr(sText)) > Call SendMessageW_LParamByValAsLong(Text5.hwnd, WM_SETTEXT, 0, > StrPtr(sText)) > > End Sub > '*** > > Note que si tu *déclares* un paramètre ByRef alors qu'il faut passé la > valeur ByVal ça n'affectera rien si tu précises ByVal devant le
paramètre
> lors de l'appel (comme dans l'exemple ci haut) > reNote que StrPtr() renvoit le pointeur de la chaine Unicode, par défaut
VB
> renvoit une version ANSI de la chaine, on doit utilise StrPtr() lorsque > l'API accepte du Unicode >
Salut Christophe! :O)
ça dépend de la déclaration :
- As String -> utilise vbNullString
- As Long -> utilise ByVal 0
--
Cordialement
Yanick
MVP pour Visual Basic
"christophe-pasde<> @wanadoo.fr>" <"christophe-pasde<> a écrit dans le
message de news:41c1ed17$0$10230$8fcfb975@news.wanadoo.fr...
Bonjour,
Byval 0
ça marche aussi?
Pour la GDI les API qui accèptent en parametre un pointeur qui peut-être
null, je leur passent comme ça et ça marche.
Christophe
Zoury a écrit :
> concernant cette déclaration :
>
>
>>ByRef lpKeyName As Long ' généralement pour les pointeurs (objets et
>>chaines)
>
>
> c'est faux concernant les chaines.. on pourrait les passé ByVal avec
> StrPtr() si l'api prend du Unicode..
>
> voici un exemple plus concret sur les façon de passé une chaine à une
API :
> '***
> ' Form1
> ' 4 TextBoxes
> ' 1 CommandButton
> Option Explicit
>
> Private Const WM_SETTEXT As Long = &HC
> Private Declare Function SendMessageA_LParamByRefAsAny _
> Lib "user32" _
> Alias "SendMessageA" _
> ( _
> ByVal hwnd As Long, _
> ByVal wMsg As Long, _
> ByVal wParam As Long, _
> ByRef lParam As Any _
> ) As Long
> Private Declare Function SendMessageA_LParamByValAsString _
> Lib "user32" _
> Alias "SendMessageA" _
> ( _
> ByVal hwnd As Long, _
> ByVal wMsg As Long, _
> ByVal wParam As Long, _
> ByVal lParam As String _
> ) As Long
>
> Private Declare Function SendMessageW_LParamByRefAsAny _
> Lib "user32" _
> Alias "SendMessageW" _
> ( _
> ByVal hwnd As Long, _
> ByVal wMsg As Long, _
> ByVal wParam As Long, _
> ByRef lParam As Any _
> ) As Long
> Private Declare Function SendMessageW_LParamByValAsLong _
> Lib "user32" _
> Alias "SendMessageW" _
> ( _
> ByVal hwnd As Long, _
> ByVal wMsg As Long, _
> ByVal wParam As Long, _
> ByVal lParam As Long _
> ) As Long
>
> Private Sub Command1_Click()
>
> Call SetTextBoxes(Text1.Text)
>
> End Sub
>
> Private Sub SetTextBoxes(ByRef sText As String)
>
> Call SendMessageA_LParamByRefAsAny(Text2.hwnd, WM_SETTEXT, 0, ByVal
> sText)
> Call SendMessageA_LParamByValAsString(Text3.hwnd, WM_SETTEXT, 0,
sText)
>
> Call SendMessageW_LParamByRefAsAny(Text4.hwnd, WM_SETTEXT, 0, ByVal
> StrPtr(sText))
> Call SendMessageW_LParamByValAsLong(Text5.hwnd, WM_SETTEXT, 0,
> StrPtr(sText))
>
> End Sub
> '***
>
> Note que si tu *déclares* un paramètre ByRef alors qu'il faut passé la
> valeur ByVal ça n'affectera rien si tu précises ByVal devant le
paramètre
> lors de l'appel (comme dans l'exemple ci haut)
> reNote que StrPtr() renvoit le pointeur de la chaine Unicode, par défaut
VB
> renvoit une version ANSI de la chaine, on doit utilise StrPtr() lorsque
> l'API accepte du Unicode
>
- As String -> utilise vbNullString - As Long -> utilise ByVal 0
-- Cordialement Yanick MVP pour Visual Basic
"christophe-pasde<> @wanadoo.fr>" <"christophe-pasde<> a écrit dans le message de news:41c1ed17$0$10230$
Bonjour,
Byval 0
ça marche aussi?
Pour la GDI les API qui accèptent en parametre un pointeur qui peut-être null, je leur passent comme ça et ça marche.
Christophe
Zoury a écrit :
> concernant cette déclaration : > > >>ByRef lpKeyName As Long ' généralement pour les pointeurs (objets et >>chaines) > > > c'est faux concernant les chaines.. on pourrait les passé ByVal avec > StrPtr() si l'api prend du Unicode.. > > voici un exemple plus concret sur les façon de passé une chaine à une
API :
> '*** > ' Form1 > ' 4 TextBoxes > ' 1 CommandButton > Option Explicit > > Private Const WM_SETTEXT As Long = &HC > Private Declare Function SendMessageA_LParamByRefAsAny _ > Lib "user32" _ > Alias "SendMessageA" _ > ( _ > ByVal hwnd As Long, _ > ByVal wMsg As Long, _ > ByVal wParam As Long, _ > ByRef lParam As Any _ > ) As Long > Private Declare Function SendMessageA_LParamByValAsString _ > Lib "user32" _ > Alias "SendMessageA" _ > ( _ > ByVal hwnd As Long, _ > ByVal wMsg As Long, _ > ByVal wParam As Long, _ > ByVal lParam As String _ > ) As Long > > Private Declare Function SendMessageW_LParamByRefAsAny _ > Lib "user32" _ > Alias "SendMessageW" _ > ( _ > ByVal hwnd As Long, _ > ByVal wMsg As Long, _ > ByVal wParam As Long, _ > ByRef lParam As Any _ > ) As Long > Private Declare Function SendMessageW_LParamByValAsLong _ > Lib "user32" _ > Alias "SendMessageW" _ > ( _ > ByVal hwnd As Long, _ > ByVal wMsg As Long, _ > ByVal wParam As Long, _ > ByVal lParam As Long _ > ) As Long > > Private Sub Command1_Click() > > Call SetTextBoxes(Text1.Text) > > End Sub > > Private Sub SetTextBoxes(ByRef sText As String) > > Call SendMessageA_LParamByRefAsAny(Text2.hwnd, WM_SETTEXT, 0, ByVal > sText) > Call SendMessageA_LParamByValAsString(Text3.hwnd, WM_SETTEXT, 0,
sText)
> > Call SendMessageW_LParamByRefAsAny(Text4.hwnd, WM_SETTEXT, 0, ByVal > StrPtr(sText)) > Call SendMessageW_LParamByValAsLong(Text5.hwnd, WM_SETTEXT, 0, > StrPtr(sText)) > > End Sub > '*** > > Note que si tu *déclares* un paramètre ByRef alors qu'il faut passé la > valeur ByVal ça n'affectera rien si tu précises ByVal devant le
paramètre
> lors de l'appel (comme dans l'exemple ci haut) > reNote que StrPtr() renvoit le pointeur de la chaine Unicode, par défaut
VB
> renvoit une version ANSI de la chaine, on doit utilise StrPtr() lorsque > l'API accepte du Unicode >
JGP_NoMail
Le 16/12/04 19:19, Zoury a écrit :
Salut! :O)
Sauf que en Vb il semble que Null et definit en variant, alors que mettre comme parametre a la place de Null ? J'ai essayé 0, mais cela ne passe pas.
utilise la constante vbNullString pour passer une chaine NULL en paramètre à des APIs
vbNullString était ce qui me manquait.
Merci a tous.
JGP
Le 16/12/04 19:19, Zoury a écrit :
Salut! :O)
Sauf que en Vb il semble que Null et definit en variant, alors que
mettre comme parametre a la place de Null ? J'ai essayé 0, mais cela ne
passe pas.
utilise la constante vbNullString pour passer une chaine NULL en paramètre à
des APIs