GetIpErrorString

Sujets variés concernant le développement en PureBasic
Francois
Messages : 11
Inscription : jeu. 02/mars/2023 18:02

GetIpErrorString

Message par Francois »

Bonjour,

J'utilise PureBasic 6.21 (Windows - x64) sous Windows 10 22H2 et j'essaye depuis une semaine d'implémenter l'api GetIpErrorString qui ne semble pas être définie de base sous PB.

Je dois faire sûrement une grosse erreur, mais j'avoue ne pas la voir, et je n'ai pas trouvé d'exemple PB qui pourrait m'aider.
Microsoft décrit cette API comme :

Code : Tout sélectionner

IPHLPAPI_DLL_LINKAGE DWORD GetIpErrorString(
  [in]      IP_STATUS ErrorCode,
  [out]     PWSTR     Buffer,
  [in, out] PDWORD    Size
);
Ici mon code :

Code : Tout sélectionner

#IP_REQ_TIMED_OUT = 11010

Prototype PROTO_GetIpErrorString(ErrorCode.l, Buffer.l, Size.l)

  If OpenLibrary(0, "Iphlpapi.dll")
    GetIpErrorString_.PROTO_GetIpErrorString
    GetIpErrorString_ = GetFunction(0, "GetIpErrorString")
    CloseLibrary(0)
  Else
    MessageRequester("Test", "DLL Iphlpapi.dll introuvable.", #PB_MessageRequester_Ok + #PB_MessageRequester_Error)
    End
  EndIf
  
  ErrorID = #IP_REQ_TIMED_OUT
  RtnCode = GetIpErrorString_(ErrorID, @PointerMes, MesLen)
  
  Debug "Ok"
Lors de son exécution, le programme plante à l'avant-dernière ligne avec le message :
[ERREUR] Accès mémoire invalide. (erreur d'écriture à l'adresse 140736612901424)
Pourriez-vous m'aider et surtout m'expliquer mon erreur ?
Je vous en remercie par avance.

François
G-Rom
Messages : 3645
Inscription : dim. 10/janv./2010 5:29

Re: GetIpErrorString

Message par G-Rom »

RtnCode = GetIpErrorString_(ErrorID, @PointerMes, MesLen)
Bonjour,
@PointerMes , tu pointes sur une variable passée en paramètre. et MesLen vaut 0, et le proto ne renvois rien.

Code : Tout sélectionner

#IP_REQ_TIMED_OUT = 11010


Import "iphlpapi.lib"
    GetIpErrorString.w(ErrorCode.l, *Buffer, *Size)
EndImport

Define bufferSize.l = 256
Define buffer.s = Space(bufferSize)


result = GetIpErrorString( #IP_REQ_TIMED_OUT,   @buffer,  @bufferSize )

If result = 0
    Debug PeekS(@buffer, bufferSize, #PB_Unicode)
Else
    Debug "GetIpErrorString failed, code=" + Str(result)
EndIf
Francois
Messages : 11
Inscription : jeu. 02/mars/2023 18:02

Re: GetIpErrorString

Message par Francois »

Bonjour,

Un grand merci pour ta réponse qui fonctionne à merveille et pour tes explications qui me permettent de mieux comprendre mes erreurs. Effectivement, j’étais loin du compte.

François
Répondre