Lorsque j'utilise la fonction GetDlgItemText, j'ai le message :
"Point d'entrée de GetDlgItem d'une DLL introuvable dans user32".
alors que la fonction SetDlgItem passe bien.
Je suis en Windows 2000 SP4.
Quelqu'un voit-il la solution ?
Problème d'alias?
Déclaration pour la version ANSI : Private Declare Function GetDlgItemText Lib "user32" Alias "GetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long
Une alternative : SendMessage avec WM_GETTEXT (c'est que fait GetDlgItemText)
On Wed, 16 Jan 2008 20:33:08 +0100, "mml" <mml@laginfo.com> wrote:
Bonjour,
Lorsque j'utilise la fonction GetDlgItemText, j'ai le message :
"Point d'entrée de GetDlgItem d'une DLL introuvable dans user32".
alors que la fonction SetDlgItem passe bien.
Je suis en Windows 2000 SP4.
Quelqu'un voit-il la solution ?
Problème d'alias?
Déclaration pour la version ANSI :
Private Declare Function GetDlgItemText Lib "user32" Alias
"GetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal
lpString As String, ByVal nMaxCount As Long) As Long
Une alternative : SendMessage avec WM_GETTEXT (c'est que fait
GetDlgItemText)
Lorsque j'utilise la fonction GetDlgItemText, j'ai le message :
"Point d'entrée de GetDlgItem d'une DLL introuvable dans user32".
alors que la fonction SetDlgItem passe bien.
Je suis en Windows 2000 SP4.
Quelqu'un voit-il la solution ?
Problème d'alias?
Déclaration pour la version ANSI : Private Declare Function GetDlgItemText Lib "user32" Alias "GetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long
Une alternative : SendMessage avec WM_GETTEXT (c'est que fait GetDlgItemText)
Jean-marc
mml wrote:
Bonjour,
Lorsque j'utilise la fonction GetDlgItemText, j'ai le message :
"Point d'entrée de GetDlgItem d'une DLL introuvable dans user32".
alors que la fonction SetDlgItem passe bien.
Je suis en Windows 2000 SP4.
Hello,
je ne m'en sers pas tous les jours mais ça m'est arrivé et je ne me rappelle pas de soucis particuliers.
As tu regardé ceci: http://support.microsoft.com/kb/267939
Il suffit parfois d'une simple erreur d'inattention dans le Declare pour avoir ensuite ce genre de messages d'erreur.
>Bonjour, > >Lorsque j'utilise la fonction GetDlgItemText, j'ai le message : > >"Point d'entrée de GetDlgItem d'une DLL introuvable dans user32". > >alors que la fonction SetDlgItem passe bien. > >Je suis en Windows 2000 SP4. > >Quelqu'un voit-il la solution ?
Problème d'alias?
Déclaration pour la version ANSI : Private Declare Function GetDlgItemText Lib "user32" Alias "GetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long
Une alternative : SendMessage avec WM_GETTEXT (c'est que fait GetDlgItemText)
Merci de cette réponse.
En effet, problème d'alias. Merci beaucoup.
"parci" <parci@invalid.fr> a écrit dans le message de
news:b5oso3d0ao1el6pi1vdemh7cappfcomisp@4ax.com...
On Wed, 16 Jan 2008 20:33:08 +0100, "mml" <mml@laginfo.com> wrote:
>Bonjour,
>
>Lorsque j'utilise la fonction GetDlgItemText, j'ai le message :
>
>"Point d'entrée de GetDlgItem d'une DLL introuvable dans user32".
>
>alors que la fonction SetDlgItem passe bien.
>
>Je suis en Windows 2000 SP4.
>
>Quelqu'un voit-il la solution ?
Problème d'alias?
Déclaration pour la version ANSI :
Private Declare Function GetDlgItemText Lib "user32" Alias
"GetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal
lpString As String, ByVal nMaxCount As Long) As Long
Une alternative : SendMessage avec WM_GETTEXT (c'est que fait
GetDlgItemText)
>Bonjour, > >Lorsque j'utilise la fonction GetDlgItemText, j'ai le message : > >"Point d'entrée de GetDlgItem d'une DLL introuvable dans user32". > >alors que la fonction SetDlgItem passe bien. > >Je suis en Windows 2000 SP4. > >Quelqu'un voit-il la solution ?
Problème d'alias?
Déclaration pour la version ANSI : Private Declare Function GetDlgItemText Lib "user32" Alias "GetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long
Une alternative : SendMessage avec WM_GETTEXT (c'est que fait GetDlgItemText)
mml
OK, merci.
"Jean-marc" a écrit dans le message de news:478e6202$0$29265$
mml wrote: > Bonjour, > > Lorsque j'utilise la fonction GetDlgItemText, j'ai le message : > > "Point d'entrée de GetDlgItem d'une DLL introuvable dans user32". > > alors que la fonction SetDlgItem passe bien. > > Je suis en Windows 2000 SP4.
Hello,
je ne m'en sers pas tous les jours mais ça m'est arrivé et je ne me rappelle pas de soucis particuliers.
As tu regardé ceci: http://support.microsoft.com/kb/267939
Il suffit parfois d'une simple erreur d'inattention dans le Declare pour avoir ensuite ce genre de messages d'erreur.
"Jean-marc" <NO_SPAM_jean_marc_n2@yahoo.fr.invalid> a écrit dans le message
de news:478e6202$0$29265$ba620e4c@news.skynet.be...
mml wrote:
> Bonjour,
>
> Lorsque j'utilise la fonction GetDlgItemText, j'ai le message :
>
> "Point d'entrée de GetDlgItem d'une DLL introuvable dans user32".
>
> alors que la fonction SetDlgItem passe bien.
>
> Je suis en Windows 2000 SP4.
Hello,
je ne m'en sers pas tous les jours mais ça m'est
arrivé et je ne me rappelle pas de soucis particuliers.
As tu regardé ceci:
http://support.microsoft.com/kb/267939
Il suffit parfois d'une simple erreur d'inattention dans
le Declare pour avoir ensuite ce genre de messages d'erreur.
"Jean-marc" a écrit dans le message de news:478e6202$0$29265$
mml wrote: > Bonjour, > > Lorsque j'utilise la fonction GetDlgItemText, j'ai le message : > > "Point d'entrée de GetDlgItem d'une DLL introuvable dans user32". > > alors que la fonction SetDlgItem passe bien. > > Je suis en Windows 2000 SP4.
Hello,
je ne m'en sers pas tous les jours mais ça m'est arrivé et je ne me rappelle pas de soucis particuliers.
As tu regardé ceci: http://support.microsoft.com/kb/267939
Il suffit parfois d'une simple erreur d'inattention dans le Declare pour avoir ensuite ce genre de messages d'erreur.
D'autre part, pourrai-je avoir un bout de code illustrant la méthode utilisant SendMessage avec WM_GETTEXT, stp ?
"parci" a écrit dans le message de news:
On Wed, 16 Jan 2008 20:33:08 +0100, "mml" wrote:
>Bonjour, > >Lorsque j'utilise la fonction GetDlgItemText, j'ai le message : > >"Point d'entrée de GetDlgItem d'une DLL introuvable dans user32". > >alors que la fonction SetDlgItem passe bien. > >Je suis en Windows 2000 SP4. > >Quelqu'un voit-il la solution ?
Problème d'alias?
Déclaration pour la version ANSI : Private Declare Function GetDlgItemText Lib "user32" Alias "GetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long
Une alternative : SendMessage avec WM_GETTEXT (c'est que fait GetDlgItemText)
D'autre part, pourrai-je avoir un bout de code illustrant la méthode
utilisant SendMessage avec WM_GETTEXT, stp ?
"parci" <parci@invalid.fr> a écrit dans le message de
news:b5oso3d0ao1el6pi1vdemh7cappfcomisp@4ax.com...
On Wed, 16 Jan 2008 20:33:08 +0100, "mml" <mml@laginfo.com> wrote:
>Bonjour,
>
>Lorsque j'utilise la fonction GetDlgItemText, j'ai le message :
>
>"Point d'entrée de GetDlgItem d'une DLL introuvable dans user32".
>
>alors que la fonction SetDlgItem passe bien.
>
>Je suis en Windows 2000 SP4.
>
>Quelqu'un voit-il la solution ?
Problème d'alias?
Déclaration pour la version ANSI :
Private Declare Function GetDlgItemText Lib "user32" Alias
"GetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal
lpString As String, ByVal nMaxCount As Long) As Long
Une alternative : SendMessage avec WM_GETTEXT (c'est que fait
GetDlgItemText)
D'autre part, pourrai-je avoir un bout de code illustrant la méthode utilisant SendMessage avec WM_GETTEXT, stp ?
"parci" a écrit dans le message de news:
On Wed, 16 Jan 2008 20:33:08 +0100, "mml" wrote:
>Bonjour, > >Lorsque j'utilise la fonction GetDlgItemText, j'ai le message : > >"Point d'entrée de GetDlgItem d'une DLL introuvable dans user32". > >alors que la fonction SetDlgItem passe bien. > >Je suis en Windows 2000 SP4. > >Quelqu'un voit-il la solution ?
Problème d'alias?
Déclaration pour la version ANSI : Private Declare Function GetDlgItemText Lib "user32" Alias "GetDlgItemTextA" (ByVal hDlg As Long, ByVal nIDDlgItem As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long
Une alternative : SendMessage avec WM_GETTEXT (c'est que fait GetDlgItemText)
Jean-marc
mml wrote:
D'autre part, pourrai-je avoir un bout de code illustrant la méthode utilisant SendMessage avec WM_GETTEXT, stp ?
Hello,
voici un petit bout de code. Il te faut une form, un textbox et un bouton de commande.
tu tapes qq chose dans la textbox puis tu cliques sur le bouton.
Option Explicit
Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" ( _ ByVal hWnd As Long, ByVal Msg As Long, _ wParam As Any, lParam As Any) As Long
D'autre part, pourrai-je avoir un bout de code illustrant la méthode
utilisant SendMessage avec WM_GETTEXT, stp ?
Hello,
voici un petit bout de code.
Il te faut une form, un textbox et un bouton de commande.
tu tapes qq chose dans la textbox puis tu cliques sur
le bouton.
Option Explicit
Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" ( _
ByVal hWnd As Long, ByVal Msg As Long, _
wParam As Any, lParam As Any) As Long
D'autre part, pourrai-je avoir un bout de code illustrant la méthode utilisant SendMessage avec WM_GETTEXT, stp ?
Hello,
voici un petit bout de code. Il te faut une form, un textbox et un bouton de commande.
tu tapes qq chose dans la textbox puis tu cliques sur le bouton.
Option Explicit
Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" ( _ ByVal hWnd As Long, ByVal Msg As Long, _ wParam As Any, lParam As Any) As Long
On Wed, 16 Jan 2008 22:31:56 +0100, "Jean-marc" wrote:
Option Explicit
Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" ( _ ByVal hWnd As Long, ByVal Msg As Long, _ wParam As Any, lParam As Any) As Long
est-ce qu'il y a une raison particluière à utiliser StrPtr dans ce cas ? Je l'aurais plutôt écrit comme ça :
res = SendMessage(Text1.hWnd, WM_GETTEXT, ByVal 255&, ByVal buf) If res Then MsgBox "buf = " & Left$(buf, res) End If
On Wed, 16 Jan 2008 22:31:56 +0100, "Jean-marc"
<NO_SPAM_jean_marc_n2@yahoo.fr.invalid> wrote:
Option Explicit
Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" ( _
ByVal hWnd As Long, ByVal Msg As Long, _
wParam As Any, lParam As Any) As Long
On Wed, 16 Jan 2008 22:31:56 +0100, "Jean-marc" wrote:
Option Explicit
Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" ( _ ByVal hWnd As Long, ByVal Msg As Long, _ wParam As Any, lParam As Any) As Long
En pratique, je pense que les 2 méthodes (Byval et StrPtr) sont correctes, avec sans doute un avantage à ta méthode qui évite le StrConv.
J'aimerais avoir l'avis de François, s'il nous lit ???
Hello,
Ton analyse est plus ou moins correcte. En effet, le passage de buffer byval SendMessage(Text1.hWnd, WM_GETTEXT, ByVal 255&, ByVal buf) entrainera 2 "StrConv" : un en entrée, et un en sortie; une chaine temporaire est aussi créée dans ce processus. Tout ça est fait de manière transparente.
Il vaudrait donc mieux utiliser la méthode avec StrPtr et StrConv (un benchmark devrait être réalisé pour s'en assurer formellement), sauf que <quote src="http://support.microsoft.com/kb/199824"> WARNING: One or more of the following functions are discussed in this article; VarPtr, VarPtrArray, VarPtrStringArray, StrPtr, ObjPtr. These functions are not supported by Microsoft Technical Support. They are not documented in the Visual Basic documentation and are provided in this Knowledge Base article "as is." </quote>
Cela étant, si le support d'unicode par MSLU sur 9x est acceptable (ou que 9x ne doit pas être supporté), on peut travailler directement en unicode: Private Declare Function SendMessage Lib "USER32" Alias "SendMessageW" ( _ ByVal hWnd As Long, ByVal Msg As Long, _ wParam As Any, lParam As Any) As Long
On évite toute conversion, donc ça va encore plus vite.
Cela étant, c'est probablement le seul avantage. Et pour manipuler de l'UI, on en est généralement pas à un temps de conversion près. Donc mon avis personnel serait, dans ce cas ci, de laisser VB faire en utilisant: SendMessage(Text1.hWnd, WM_GETTEXT, ByVal 255&, ByVal buf) parce que cette syntaxe est documenté et a (probablement) été nettement plus testée que celle utilisant StrPtr.
Néanmoins, on peut facilement imaginer d'autres cas où la performance importe, et où passer directement la chaine en unicode (et éventuellement réaliser les conversions spécifiques avant ou après e n fonction du cas) apporte de nettes améliorations. Notament, il me semble me souvenir que le triplet FindFirstFile/FindNextFile/FindClose est plus performant dans sa version W, lors d'appels depuis VB. Je ne sais pas si c'est imputable à la conversion que fait VB, ou si l'implémentation de la version A est le réel point problématique, mais ça montre certainement le point que certains appels à la version W avec StrPtr peuvent être plus intéressants.
Sur le plan de l'utilisation de WM_GETTEXT par contre, pour que l'exemple soit complet il faudrait un appel complémentaire à WM_GETTEXTLENGTH: <quote src="Windows SDK"> Under certain conditions, the DefWindowProc function returns a value that is larger than the actual length of the text. This occurs with certain mixtures of ANSI and Unicode, and is due to the system allowing for the possible existence of double-byte character set (DBCS) characters within the text. The return value, however, will always be at least as large as the actual length of the text; you can thus always use it to guide buffer allocation. </quote>
Const WM_GETTEXTLENGTH As Long = &h000E
buf = Space(SendMessage(Text1.hWnd, WM_GETTEXTLENGTH, ByVal 0&, ByVal 0&)) If Lenb(buf) Then res = SendMessage(Text1.hWnd, WM_GETTEXT, ByVal 255&, ByVal StrPtr(buf)) MsgBox "buf = " & left$(buf , res) End If
François
On Jan 17, 9:46 pm, "Jean-marc"
<NO_SPAM_jean_marc...@yahoo.fr.invalid> wrote:
parci wrote:
> On Wed, 16 Jan 2008 22:31:56 +0100, "Jean-marc"
> <NO_SPAM_jean_marc...@yahoo.fr.invalid> wrote:
> Par curiosité, Jean Marc,
> est-ce qu'il y a une raison particluière à utiliser StrPtr dans ce c as
> ? Je l'aurais plutôt écrit comme ça :
> res = SendMessage(Text1.hWnd, WM_GETTEXT, ByVal 255&, ByVal buf )
> If res Then
> MsgBox "buf = " & Left$(buf, res)
> End If
Hello Parci,
(( FRANCOIS, si tu nous lis ?? ))
On peut effectivement faire comme tu dis, ça fonctionnera très bien
et économiseras un appel à StrConv(), ce qui est bien !
Le test if res=0 n'est pas utile, on a en effet un res=0 légitime
si la textbox est vide, et Left() ne se plaindra pas dans ce cas.
En pratique, je pense que les 2 méthodes (Byval et StrPtr) sont
correctes, avec sans doute un avantage à ta méthode qui évite
le StrConv.
J'aimerais avoir l'avis de François, s'il nous lit ???
Hello,
Ton analyse est plus ou moins correcte.
En effet, le passage de buffer byval
SendMessage(Text1.hWnd, WM_GETTEXT, ByVal 255&, ByVal buf)
entrainera 2 "StrConv" : un en entrée, et un en sortie; une chaine
temporaire est aussi créée dans ce processus. Tout ça est fait de
manière transparente.
Il vaudrait donc mieux utiliser la méthode avec StrPtr et StrConv (un
benchmark devrait être réalisé pour s'en assurer formellement), sauf
que
<quote src="http://support.microsoft.com/kb/199824">
WARNING: One or more of the following functions are discussed in this
article; VarPtr, VarPtrArray, VarPtrStringArray, StrPtr, ObjPtr. These
functions are not supported by Microsoft Technical Support. They are
not documented in the Visual Basic documentation and are provided in
this Knowledge Base article "as is."
</quote>
Cela étant, si le support d'unicode par MSLU sur 9x est acceptable (ou
que 9x ne doit pas être supporté), on peut travailler directement en
unicode:
Private Declare Function SendMessage Lib "USER32" Alias
"SendMessageW" ( _
ByVal hWnd As Long, ByVal Msg As Long, _
wParam As Any, lParam As Any) As Long
On évite toute conversion, donc ça va encore plus vite.
Cela étant, c'est probablement le seul avantage. Et pour manipuler de
l'UI, on en est généralement pas à un temps de conversion près. Donc
mon avis personnel serait, dans ce cas ci, de laisser VB faire en
utilisant:
SendMessage(Text1.hWnd, WM_GETTEXT, ByVal 255&, ByVal buf)
parce que cette syntaxe est documenté et a (probablement) été
nettement plus testée que celle utilisant StrPtr.
Néanmoins, on peut facilement imaginer d'autres cas où la performance
importe, et où passer directement la chaine en unicode (et
éventuellement réaliser les conversions spécifiques avant ou après e n
fonction du cas) apporte de nettes améliorations. Notament, il me
semble me souvenir que le triplet FindFirstFile/FindNextFile/FindClose
est plus performant dans sa version W, lors d'appels depuis VB. Je ne
sais pas si c'est imputable à la conversion que fait VB, ou si
l'implémentation de la version A est le réel point problématique, mais
ça montre certainement le point que certains appels à la version W
avec StrPtr peuvent être plus intéressants.
Sur le plan de l'utilisation de WM_GETTEXT par contre, pour que
l'exemple soit complet il faudrait un appel complémentaire à
WM_GETTEXTLENGTH:
<quote src="Windows SDK">
Under certain conditions, the DefWindowProc function returns a value
that is larger than the actual length of the text. This occurs with
certain mixtures of ANSI and Unicode, and is due to the system
allowing for the possible existence of double-byte character set
(DBCS) characters within the text. The return value, however, will
always be at least as large as the actual length of the text; you can
thus always use it to guide buffer allocation.
</quote>
Const WM_GETTEXTLENGTH As Long = &h000E
buf = Space(SendMessage(Text1.hWnd, WM_GETTEXTLENGTH, ByVal 0&,
ByVal 0&))
If Lenb(buf) Then
res = SendMessage(Text1.hWnd, WM_GETTEXT, ByVal 255&, ByVal
StrPtr(buf))
MsgBox "buf = " & left$(buf , res)
End If
En pratique, je pense que les 2 méthodes (Byval et StrPtr) sont correctes, avec sans doute un avantage à ta méthode qui évite le StrConv.
J'aimerais avoir l'avis de François, s'il nous lit ???
Hello,
Ton analyse est plus ou moins correcte. En effet, le passage de buffer byval SendMessage(Text1.hWnd, WM_GETTEXT, ByVal 255&, ByVal buf) entrainera 2 "StrConv" : un en entrée, et un en sortie; une chaine temporaire est aussi créée dans ce processus. Tout ça est fait de manière transparente.
Il vaudrait donc mieux utiliser la méthode avec StrPtr et StrConv (un benchmark devrait être réalisé pour s'en assurer formellement), sauf que <quote src="http://support.microsoft.com/kb/199824"> WARNING: One or more of the following functions are discussed in this article; VarPtr, VarPtrArray, VarPtrStringArray, StrPtr, ObjPtr. These functions are not supported by Microsoft Technical Support. They are not documented in the Visual Basic documentation and are provided in this Knowledge Base article "as is." </quote>
Cela étant, si le support d'unicode par MSLU sur 9x est acceptable (ou que 9x ne doit pas être supporté), on peut travailler directement en unicode: Private Declare Function SendMessage Lib "USER32" Alias "SendMessageW" ( _ ByVal hWnd As Long, ByVal Msg As Long, _ wParam As Any, lParam As Any) As Long
On évite toute conversion, donc ça va encore plus vite.
Cela étant, c'est probablement le seul avantage. Et pour manipuler de l'UI, on en est généralement pas à un temps de conversion près. Donc mon avis personnel serait, dans ce cas ci, de laisser VB faire en utilisant: SendMessage(Text1.hWnd, WM_GETTEXT, ByVal 255&, ByVal buf) parce que cette syntaxe est documenté et a (probablement) été nettement plus testée que celle utilisant StrPtr.
Néanmoins, on peut facilement imaginer d'autres cas où la performance importe, et où passer directement la chaine en unicode (et éventuellement réaliser les conversions spécifiques avant ou après e n fonction du cas) apporte de nettes améliorations. Notament, il me semble me souvenir que le triplet FindFirstFile/FindNextFile/FindClose est plus performant dans sa version W, lors d'appels depuis VB. Je ne sais pas si c'est imputable à la conversion que fait VB, ou si l'implémentation de la version A est le réel point problématique, mais ça montre certainement le point que certains appels à la version W avec StrPtr peuvent être plus intéressants.
Sur le plan de l'utilisation de WM_GETTEXT par contre, pour que l'exemple soit complet il faudrait un appel complémentaire à WM_GETTEXTLENGTH: <quote src="Windows SDK"> Under certain conditions, the DefWindowProc function returns a value that is larger than the actual length of the text. This occurs with certain mixtures of ANSI and Unicode, and is due to the system allowing for the possible existence of double-byte character set (DBCS) characters within the text. The return value, however, will always be at least as large as the actual length of the text; you can thus always use it to guide buffer allocation. </quote>
Const WM_GETTEXTLENGTH As Long = &h000E
buf = Space(SendMessage(Text1.hWnd, WM_GETTEXTLENGTH, ByVal 0&, ByVal 0&)) If Lenb(buf) Then res = SendMessage(Text1.hWnd, WM_GETTEXT, ByVal 255&, ByVal StrPtr(buf)) MsgBox "buf = " & left$(buf , res) End If
François
Jean-marc
>François Picalausa wrote:
<snip les immenses précisions>
Je me disais bien que tu aurais en réserve une jolie explication extrèmement documentée, mais je n'en espérais quand même pas tant :-)))))))))