IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

DHCP - dhcpsapi.dll - DhcpGetClientInfo - error 1781


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Par défaut DHCP - dhcpsapi.dll - DhcpGetClientInfo - error 1781
    Hello, j'ai un gros problème avec l'utilisation de l'API "DhcpGetClientInfo". Des fois ça marche, des fois pas!!!



    Le code suivant fonctionne très bien, par contre quand je décommente "// t_DhcpSetClientInfo _DhcpSetClientInfo=NULL;", DhcpGetClientInfo retrourne une erreur 1781 "RPC_X_ENUM_VALUE_OUT_OF_RANGE" ???
    Ou mieux si je rajoute une variable avant/après DhcpSetClientInfo, même erreur. Comprend pas... Please help me.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #include <windows.h>
    #include "dhcpsapi.h"
    #pragma hdrstop
     
    //---------------------------------------------------------------------------
     
    typedef DWORD DHCP_API_FUNCTION (*t_DhcpGetClientInfo)(
      LPWSTR ServerIpAddress,
      DHCP_SEARCH_INFO* SearchInfo,
      LPDHCP_CLIENT_INFO *ClientInfo
    );
    typedef VOID DHCP_API_FUNCTION (*t_DhcpRpcFreeMemory)(
        PVOID BufferPointer
        );
    typedef DWORD DHCP_API_FUNCTION (*t_DhcpSetClientInfo)(
        DHCP_CONST WCHAR *ServerIpAddress,
        DHCP_CONST DHCP_CLIENT_INFO *ClientInfo
        );
    #pragma argsused
    WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
      int a;
     
      t_DhcpGetClientInfo _DhcpGetClientInfo;
      t_DhcpRpcFreeMemory _DhcpRpcFreeMemory;
     
      HMODULE hMod=LoadLibrary("c:\\windows\\system32\\dhcpsapi.dll");
      DHCP_SEARCH_INFO SearchInfo;
      SearchInfo.SearchType=2;
      SearchInfo.SearchInfo.ClientName=L"fab.";
     
      _DhcpGetClientInfo=(t_DhcpGetClientInfo)GetProcAddress(hMod,"DhcpGetClientInfo");
      _DhcpRpcFreeMemory=(t_DhcpRpcFreeMemory)GetProcAddress(hMod,"DhcpRpcFreeMemory");
     
      DHCP_CLIENT_INFO* info;
     
      a=_DhcpGetClientInfo(L"10.77.1.254",&SearchInfo,&info);
      _DhcpRpcFreeMemory(info);
     
     // t_DhcpSetClientInfo _DhcpSetClientInfo=NULL;
      FreeLibrary(hMod);
            return 0;

  2. #2
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Bah à mon avis c'est ton " _DhcpRpcFreeMemory(info);" qui fout la m...

    Tu est sur que ce n'est pas plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     _DhcpRpcFreeMemory(&info);
    ???

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Par défaut
    non, non. J'ai déjà tout essayé. tu peux mettre ça " _DhcpRpcFreeMemory(&info);" en commentaire et ajouter 1-2 autres déclarations de variable et tu retombes sur le problème ?!?

  4. #4
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Essayer d'appeller DHCPDsInit() et DHCPDsCleanup() pour initialiser et terminer l'utilisation des fonctions DHCP.

    Si ça ne marche pas, reposte ton code que je vois si leur utilisation est correct.

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Par défaut
    hello,
    Alors l'appel de l'api DHCPDsInit retourne comme code d'erreur 20070 (ERROR_DDS_NO_DS_AVAILABLE). Mais je ne suis pas sûr que l'appel de cette API soit essentielle.

    //---------------------------------------------------------------------------
    #include <windows.h>
    #include "dhcpsapi.h"
    #pragma hdrstop

    //---------------------------------------------------------------------------

    typedef DWORD DHCP_API_FUNCTION (*t_DhcpGetClientInfo)(
    LPWSTR ServerIpAddress,
    DHCP_SEARCH_INFO* SearchInfo,
    LPDHCP_CLIENT_INFO *ClientInfo
    );
    typedef VOID DHCP_API_FUNCTION (*t_DhcpRpcFreeMemory)(
    PVOID BufferPointer
    );
    typedef DWORD DHCP_API_FUNCTION (*t_DhcpSetClientInfo)(
    DHCP_CONST WCHAR *ServerIpAddress,
    DHCP_CONST DHCP_CLIENT_INFO *ClientInfo
    );
    typedef DWORD DHCP_API_FUNCTION (*t_DhcpDsInit)(
    void
    );
    #pragma argsused
    WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    int a;

    t_DhcpGetClientInfo _DhcpGetClientInfo;
    t_DhcpRpcFreeMemory _DhcpRpcFreeMemory;
    t_DhcpDsInit _DhcpDsInit;

    HMODULE hMod=LoadLibrary("c:\\windows\\system32\\dhcpsapi.dll");
    DHCP_SEARCH_INFO SearchInfo;
    SearchInfo.SearchType=DhcpClientName;
    SearchInfo.SearchInfo.ClientName=L"fab.";

    _DhcpGetClientInfo=(t_DhcpGetClientInfo)GetProcAddress(hMod,"DhcpGetClientInfo");

    _DhcpRpcFreeMemory=(t_DhcpRpcFreeMemory)GetProcAddress(hMod,"DhcpRpcFreeMemory");
    _DhcpDsInit=(t_DhcpDsInit)GetProcAddress(hMod,"DhcpDsInit");

    a=_DhcpDsInit();
    DHCP_CLIENT_INFO* info;

    a=_DhcpGetClientInfo(L"10.77.1.254",&SearchInfo,&info);
    _DhcpRpcFreeMemory(info);

    t_DhcpSetClientInfo _DhcpSetClientInfo=NULL;
    FreeLibrary(hMod);
    return 0;
    }
    //---------------------------------------------------------------------------

  6. #6
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Bon si ça ne marche pas, enlève les appels, et regardons plus du côté de l'appel à DHCPGetClientInfo.

    Est-ce que c'est normal que le nom du client soit "fab.", tu peux pas essayer une adresse complète genre "www.google.fr" ?

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Par défaut
    Oui, pour le nom c'est tout à fait normal. Mon serveur DHCP a distribué une adresse a une machine dont le nom est "fab.".
    Mais ce qui est incompréhensible : Le code fonctionne très bien, par contre quand je décommente "// t_DhcpSetClientInfo _DhcpSetClientInfo=NULL;" ou ajoute une variable, c'est là que ça part en c...

  8. #8
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Essaye donc de renommer ton poste en "fab", car le "." est normalement réservé comme séparateur entre domaines. Plus précisément, la syntaxe usuelle est : "<serveur_virtuel>.<host>.<subdomain_n>. ... .<subdomain_1>.<domain>".

    Autre chose essaye ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      info = NULL;
      printf("- info ptr : 0x%08x\n", info);
      a=_DhcpGetClientInfo(L"10.77.1.254",&SearchInfo,&info);
      printf("- info ptr : 0x%08x\n", info);
      _DhcpRpcFreeMemory(info);
      printf("- info ptr : 0x%08x\n", info);
    Car je reste persuadé que ton problème est lié soit à GetClientInfo, soit FreeMemory.

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Par défaut
    pour faire plus simple.

    Ca ne marche pas :

    //---------------------------------------------------------------------------
    #include <windows.h>
    #include <stdio.h>
    #include "dhcpsapi.h"
    #pragma hdrstop

    //---------------------------------------------------------------------------

    typedef DWORD DHCP_API_FUNCTION (*t_DhcpGetClientInfo)(
    LPWSTR ServerIpAddress,
    DHCP_SEARCH_INFO* SearchInfo,
    LPDHCP_CLIENT_INFO *ClientInfo
    );
    typedef VOID DHCP_API_FUNCTION (*t_DhcpRpcFreeMemory)(
    PVOID BufferPointer
    );
    typedef DWORD DHCP_API_FUNCTION (*t_DhcpSetClientInfo)(
    DHCP_CONST WCHAR *ServerIpAddress,
    DHCP_CONST DHCP_CLIENT_INFO *ClientInfo
    );
    typedef DWORD DHCP_API_FUNCTION (*t_DhcpDsInit)(
    void
    );
    #pragma argsused
    int main(int argc, char* argv[])
    {
    int a;

    t_DhcpGetClientInfo _DhcpGetClientInfo;
    t_DhcpRpcFreeMemory _DhcpRpcFreeMemory;

    HMODULE hMod=LoadLibrary("c:\\windows\\system32\\dhcpsapi.dll");
    DHCP_SEARCH_INFO SearchInfo;
    SearchInfo.SearchType=DhcpClientName;
    SearchInfo.SearchInfo.ClientName=L"fab.";

    _DhcpGetClientInfo=(t_DhcpGetClientInfo)GetProcAddress(hMod,"DhcpGetClientInfo");


    DHCP_CLIENT_INFO* info=NULL;
    printf("- info ptr : 0x%08x\n",info);

    a=_DhcpGetClientInfo(L"10.77.1.254",&SearchInfo,&info);
    printf("- info ptr : 0x%08x\n",info);

    FreeLibrary(hMod);
    return 0;
    }

    - info ptr : 0x00000000
    - info ptr : 0x00000000

    Ca marche :

    //---------------------------------------------------------------------------
    #include <windows.h>
    #include <stdio.h>
    #include "dhcpsapi.h"
    #pragma hdrstop

    //---------------------------------------------------------------------------

    typedef DWORD DHCP_API_FUNCTION (*t_DhcpGetClientInfo)(
    LPWSTR ServerIpAddress,
    DHCP_SEARCH_INFO* SearchInfo,
    LPDHCP_CLIENT_INFO *ClientInfo
    );
    typedef VOID DHCP_API_FUNCTION (*t_DhcpRpcFreeMemory)(
    PVOID BufferPointer
    );
    typedef DWORD DHCP_API_FUNCTION (*t_DhcpSetClientInfo)(
    DHCP_CONST WCHAR *ServerIpAddress,
    DHCP_CONST DHCP_CLIENT_INFO *ClientInfo
    );
    typedef DWORD DHCP_API_FUNCTION (*t_DhcpDsInit)(
    void
    );
    #pragma argsused
    int main(int argc, char* argv[])
    {
    int a;

    t_DhcpGetClientInfo _DhcpGetClientInfo;
    // t_DhcpRpcFreeMemory _DhcpRpcFreeMemory;

    HMODULE hMod=LoadLibrary("c:\\windows\\system32\\dhcpsapi.dll");
    DHCP_SEARCH_INFO SearchInfo;
    SearchInfo.SearchType=DhcpClientName;
    SearchInfo.SearchInfo.ClientName=L"fab.";

    _DhcpGetClientInfo=(t_DhcpGetClientInfo)GetProcAddress(hMod,"DhcpGetClientInfo");


    DHCP_CLIENT_INFO* info=NULL;
    printf("- info ptr : 0x%08x\n",info);

    a=_DhcpGetClientInfo(L"10.77.1.254",&SearchInfo,&info);
    printf("- info ptr : 0x%08x\n",info);

    FreeLibrary(hMod);
    return 0;
    }
    //---------------------------------------------------------------------------

    - info ptr : 0x00000000
    - info ptr : 0x0015dec0

  10. #10
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Même si ça parait on est tout proche de trouver la solution.

    Dans tes options de compilations tu as bien :

    - /D_UNICODE (définition du symbole _UNICODE)
    - compilation en mode full debug (aucune optimisations)

    ?

    Enfin pourquoi as tu besoin de charger la dll dynamiquement ? Tu ne peux pas faire un link avec la bibliothèque d'importation dhcpapi.lib comme on fait classiquement ?

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 391
    Par défaut
    Sous Windows, ne pas définir _UNICODE seul. Il faut _UNICODE et UNICODE.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Création DLL - Link error
    Par thybang dans le forum Débuter
    Réponses: 9
    Dernier message: 28/10/2014, 14h58
  2. DLL - Runtime error R6033
    Par astro01 dans le forum C++
    Réponses: 2
    Dernier message: 12/05/2014, 22h37
  3. Import de DLL: fatal error C1083
    Par Philoubilou dans le forum C++
    Réponses: 1
    Dernier message: 24/04/2007, 16h22
  4. Runtime error avec UDF/DLL
    Par pram dans le forum SQL
    Réponses: 6
    Dernier message: 22/04/2005, 10h30
  5. Error:msxml3.dll (0x80070005)
    Par faamugol dans le forum ASP
    Réponses: 5
    Dernier message: 27/04/2004, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo