Page 1 sur 1

GetIpErrorString

Publié : dim. 21/déc./2025 17:31
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

Re: GetIpErrorString

Publié : mar. 23/déc./2025 8:39
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

Re: GetIpErrorString

Publié : mar. 23/déc./2025 8:59
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