OVH Cloud OVH Cloud

Pb avec une fonction sous XP pro

2 réponses
Avatar
Brigitte Dzewowski
Bonjour

J'utilise dans une appli écrite en vb6 une fonction dont voici le code :

*************************
Public Sub DonnerEspaceDisque(ByVal Disque As String, espacelibre As Long)
Dim numSectorsPerCluster As Long
Dim numBytesPerSector As Long
Dim numFreeClusters As Long
Dim numTotalClusters As Long
Dim free_Space As Long
Dim total_Space As Long
Dim success As Boolean
success = GetDiskFreeSpace(Disque, numSectorsPerCluster,
numBytesPerSector, numFreeClusters, numTotalClusters)
free_Space = numSectorsPerCluster * numBytesPerSector *
numFreeClusters

espacelibre = free_Space

End Sub
*************************
cette fonction ne posait aucun pb sous win98 mais elle ne fonctionne pas du
tout sous XP pro ....

Si quelqu'un pouvait m'aider....

Merci d'avance

Philippe

2 réponses

Avatar
Zoury
Salut Philippe! :O)

Si quelqu'un pouvait m'aider....



J'vais t'aider à t'aider tiens!
Voici un p'tit truc qui pourra t'être utile dans les cas où certains APIs ne
fonctionne pas...


Dans la MSDN, on trouve l'aide sur l'API que l'on veut utiliser, voici la
fiche concernant la fonction GetDiskFreeSpace() :
http://msdn.microsoft.com/library/en-us/fileio/base/getdiskfreespace.asp
Je recommande fortement de lire la fiche au complet.. il y a souvent des
spécifications précises à appliquer dans des cas précis.


Regardons attentivement la section "Return Values".. :

'***
Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error
information, call GetLastError.
'***

La fonction GetLastError() n'est pas utilisable depuis VB. VB gérant lui
même les exceptions qui survienne dans le système, GetLastError() retournera
toujours 0 car VB a déjà passé par là. Tu peux toutefois lire la propriété
Err.LastDLLError qui retourne le numéro de la dernière erreur externe à être
survenue.


Maintenant, pour trouver la signification de cette valeur on a deux options
:

1. On ouvre le fichier, ERROR.H, qui se trouve ici sur mon poste :
C:Program FilesMicrosoft Visual StudioVC98Include, et tu cherches pour
le numéro que tu as trouvé afin d'obtenir la constante qui la spécifie. Par
exemple l'erreur 15 est désigne par la constante ERROR_INVALID_DRIVE, qui
peut-être recherché dans la MSDN afin d'obtenir une description plus claire.

2. Tu appelles la function FormatMessage() qui permet de retrouver le
message d'erreur pour l'erreur demandé :
'***
' Module1
Option Explicit

Private Declare Function FormatMessageA _
Lib "kernel32" _
( _
ByVal dwFlags As Long, _
ByRef lpSource As Any, _
ByVal dwMessageId As Long, _
ByVal dwLanguageId As Long, _
ByVal lpBuffer As String, _
ByVal nSize As Long, _
ByRef Arguments As Long _
) As Long

Private Const FORMAT_MESSAGE_FROM_SYSTEM As Long = &H1000
Private Const LANG_NEUTRAL As Long = &H0

Private Sub Main()
Debug.Print FormatMessage(15)
End Sub

Private Function FormatMessage(ByRef lErrorNumber As Long) As String
FormatMessage = String$(255, Chr$(0))
Call FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, _
ByVal 0&, _
lErrorNumber, _
LANG_NEUTRAL, _
FormatMessage, _
255, _
ByVal 0&)
FormatMessage = Left$(FormatMessage, _
InStr(FormatMessage, vbNewLine) - 1)
End Function
'***

Reviens nous quand tu connaîtras l'erreur ;O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Avatar
Brigitte Dzewowski
merci je regarde cela

Philippe


"Zoury" a écrit dans le message de news:

Salut Philippe! :O)

> Si quelqu'un pouvait m'aider....

J'vais t'aider à t'aider tiens!
Voici un p'tit truc qui pourra t'être utile dans les cas où certains APIs


ne
fonctionne pas...


Dans la MSDN, on trouve l'aide sur l'API que l'on veut utiliser, voici la
fiche concernant la fonction GetDiskFreeSpace() :
http://msdn.microsoft.com/library/en-us/fileio/base/getdiskfreespace.asp
Je recommande fortement de lire la fiche au complet.. il y a souvent des
spécifications précises à appliquer dans des cas précis.


Regardons attentivement la section "Return Values".. :

'***
Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error
information, call GetLastError.
'***

La fonction GetLastError() n'est pas utilisable depuis VB. VB gérant lui
même les exceptions qui survienne dans le système, GetLastError()


retournera
toujours 0 car VB a déjà passé par là. Tu peux toutefois lire la propriété
Err.LastDLLError qui retourne le numéro de la dernière erreur externe à


être
survenue.


Maintenant, pour trouver la signification de cette valeur on a deux


options
:

1. On ouvre le fichier, ERROR.H, qui se trouve ici sur mon poste :
C:Program FilesMicrosoft Visual StudioVC98Include, et tu cherches


pour
le numéro que tu as trouvé afin d'obtenir la constante qui la spécifie.


Par
exemple l'erreur 15 est désigne par la constante ERROR_INVALID_DRIVE, qui
peut-être recherché dans la MSDN afin d'obtenir une description plus


claire.

2. Tu appelles la function FormatMessage() qui permet de retrouver le
message d'erreur pour l'erreur demandé :
'***
' Module1
Option Explicit

Private Declare Function FormatMessageA _
Lib "kernel32" _
( _
ByVal dwFlags As Long, _
ByRef lpSource As Any, _
ByVal dwMessageId As Long, _
ByVal dwLanguageId As Long, _
ByVal lpBuffer As String, _
ByVal nSize As Long, _
ByRef Arguments As Long _
) As Long

Private Const FORMAT_MESSAGE_FROM_SYSTEM As Long = &H1000
Private Const LANG_NEUTRAL As Long = &H0

Private Sub Main()
Debug.Print FormatMessage(15)
End Sub

Private Function FormatMessage(ByRef lErrorNumber As Long) As String
FormatMessage = String$(255, Chr$(0))
Call FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, _
ByVal 0&, _
lErrorNumber, _
LANG_NEUTRAL, _
FormatMessage, _
255, _
ByVal 0&)
FormatMessage = Left$(FormatMessage, _
InStr(FormatMessage, vbNewLine) - 1)
End Function
'***

Reviens nous quand tu connaîtras l'erreur ;O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/