[R] Comment envoyer un parametre NULL avec DllCall ?

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
GMib
Niveau 4
Niveau 4
Messages : 57
Enregistré le : sam. 23 janv. 2010 12:39
Status : Hors ligne

[R] Comment envoyer un parametre NULL avec DllCall ?

#1

Message par GMib »

Bonsoir, je n'arrive pas a faire fonctionner un DllCall
La fonction :

Code : Tout sélectionner

Func _HLVisitElements($dll, $el, $CallBackFunc, $TagName = "", $AttributeName = "", $AttributeValue = "",$depth = 0)
    $handle = DLLCallbackRegister ($CallBackFunc, "BOOL","ptr;ptr")
    $result = DllCall($dll, "int", "HTMLayoutVisitElements","ptr",$el,"str",$TagName,"str",$AttributeName,"wstr",$AttributeValue,"ptr",DllCallbackGetPtr($handle),"ptr","","DWORD",$depth)
    DllCallbackFree($handle)
    If @error Then Return -1
    Return 1
EndFunc
l'aide de la fonction de la dll :

Code : Tout sélectionner

EXTERN_C HLDOM_RESULT HLAPI HTMLayoutVisitElements  ( HELEMENT  he,  
  LPCSTR  tagName,  
  LPCSTR  attributeName,  
  LPCWSTR  attributeValue,  
  HTMLayoutElementCallback *  callback,  
  LPVOID  param,  
  DWORD  depth   
 )    

Call specified function for every element in a DOM that meets specified criteria. 


Parameters:
[in]  he  HELEMENT  
[in]  tagName  LPCSTR, comma separated list of tag names to search, e.g. "div", "p", "div,p" etc. Can be NULL.  
[in]  attributeName  LPCSTR, name of attribute, can contain wildcard characters, see below. Can be NULL.  
[in]  attributeValue  LPCWSTR, value of attribute, can contain wildcard characters, see below. Can be NULL.  
[in]  callback  HTMLayoutElementCallback*, address of callback function being called on each element found.  
[in]  param  LPVOID, additional parameter to be passed to callback function.  
[in]  depth  DWORD, depth - depth of search. 0 means all descendants, 1 - direct children only, 2 - children and their children and so on.  
 
Cette fonction liste les éléments html trouvé suivant les paramètres, si je met les 3 paramètres (le tag, l'attribut et la valeur de l'attribut html) ca marche.
si je veu lister les tags sans attribut ca ne marche plus.

Code : Tout sélectionner

_HLVisitElements($dll, $root, "_test", "li", "class", "selected",0) ;fonctionne

_HLVisitElements($dll, $root, "_test", "div", "", "",0) ;ne fonctionne pas
je suppose que DllCall ne reconnait pas "" comme NULL.
il y a bien évidemment une balise div présente dans mon code html.

Si quelqu'un a une idée, je suis preneur ;)
Modifié en dernier par GMib le mar. 20 avr. 2010 22:17, modifié 1 fois.
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] Comment envoyer un parametre NULL avec DllCall ?

#2

Message par SagePourpre »

Pour une valeur de retour nulle, "void" est utilisée.

Pour une valeur nulle, 0 ne fonctionne pas ?
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
GMib
Niveau 4
Niveau 4
Messages : 57
Enregistré le : sam. 23 janv. 2010 12:39
Status : Hors ligne

Re: [..] Comment envoyer un parametre NULL avec DllCall ?

#3

Message par GMib »

non 0 fait la meme chose que "" c'est a dire : rien ;) DllCall retourne pourtant le code correspondant a HLDOM_OK - function completed successfully mais la fonction callback n'est pas appellé comme s'il n'avait trouver aucun div. en c++ il y a bien une différence entre NULL et "" ou 0 ?

Edit: Resolu, il suffit de remplacer str ou wstr par ptr quand la valeur est nulle, une valeur nulle avec le type a str ne marche pas.
Répondre