Problème avec l'api GetIpForwardTable

t_barbillon Messages postés 341 Date d'inscription mercredi 8 juin 2005 Statut Membre Dernière intervention 10 février 2009 - 14 sept. 2005 à 16:06
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 15 sept. 2005 à 16:21
Salut,
j'ai un problème avec l'api GetIpForwardTable dans iphlpapi.dll, le tableau qui donne les routes est toujours nul, est ce quelqu'un aurait une idée ?

Voila mon code :
//MIB_IPFORWARDTABLE pIpForwardTable;
long dwSize = 0;
int dwRetVal = 0;



Int64 StructSize = Marshal.SizeOf(typeof(MIB_IPFORWARDTABLE));
IntPtr pIpForwardTable = Marshal.AllocHGlobal(Convert.ToInt16(StructSize));
if (GetIpForwardTable(pIpForwardTable, ref dwSize, true) == ERROR_INSUFFICIENT_BUFFER)
{
Marshal.FreeHGlobal(pIpForwardTable);

//Sur dépassement du buffer, Réalocation de la mémoire
pIpForwardTable = Marshal.AllocHGlobal(Convert.ToInt16(dwSize));
}

if ((dwRetVal GetIpForwardTable(pIpForwardTable, ref dwSize, true)) NO_ERROR)
{
MIB_IPFORWARDTABLE Routes = (MIB_IPFORWARDTABLE)Marshal.PtrToStructure(pIpForwardTable, typeof(MIB_IPFORWARDTABLE));

for (int i = 0; i < Routes.dwNumEntries; i++)
{

MessageBox.Show(Routes.table[i].dwForwardDest.ToString());
}

3 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
14 sept. 2005 à 17:38
Salut tu ne donnes pas les prototypes PInvoke !? Je ne connais pas cette API mais si je comprends bien tu passes une structure en IntPtr, pourquoi ne pas la passer en "ref myStruct". Comme je ne connais pas j'ai un peu de mal à suivre mais pourquoi tu utilises un int64 pour SizeOf et un Int16 pour AllocHGlobal ces méthodes prennent un int normalement. Autre chose je pense que tu le fais exprès de passer dwSize à 0 !? Autre remarque, dwSize devrait être de type UInt32 ( PULONG est typedef ULONG *PULONG; et ULONG est typedef unsigned long ULONG; )
0
t_barbillon Messages postés 341 Date d'inscription mercredi 8 juin 2005 Statut Membre Dernière intervention 10 février 2009 2
15 sept. 2005 à 09:22
Voila le proto

[DllImport("iphlpapi.dll", CharSet=CharSet.Ansi)]
public static extern int GetIpForwardTable(IntPtr RouteTablePtr, ref Int64 Buffer, bool Order);
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
15 sept. 2005 à 16:21
"ref uint", non !?
0
Rejoignez-nous