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 :

Lecture d'une dll


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 217
    Par défaut Lecture d'une dll
    Bonjour,

    Je suis entrain de développer une application avec MVS 2010, j'essaye de me connecter une machine, j'ai la dll qu'il faut.

    Dans un premier temps je voudrais savoir si mon code est bon ou pas.

    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
     
    #include "stdafx.h"
     
    typedef OLECHAR FAR* BSTR;
     
    typedef bool (WINAPI* DLL_Function_Connect_Net) (BSTR, long); 
    ///typedef bool (WINAPI* DLL_Function_GetUserInfo) (int, int, string*, string*, int, bool); 
     
    DLL_Function_Connect_Net Connect_Net; 
    //DLL_Function_GetUserInfo GetUserInfo;
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	HINSTANCE HStpDll = LoadLibrary(_T("zkemsdk.dll"));
     
    	Connect_Net = (DLL_Function_Connect_Net)GetProcAddress( HStpDll, "Z_Connect_NET");
    	//GetUserInfo = (DLL_Function_GetUserInfo)GetProcAddress( HStpDll, "Z_GetUserInfo");
     
    	bool result = false;
     
    	cout << "Result [ " << result << " ]\n";
     
    	BSTR IP_adresse = SysAllocString(L"192.168.1.201");
    	char* IP_adresse_char = "192.168.1.201";
    	result = Connect_Net(IP_adresse, 4370);
     
    	cout << "Result [ " << result << " ]\n";
     
    	return 0;
    }
    L'erreur
    Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

  2. #2
    screetch
    Invité(e)
    Par défaut
    il vient d'où le WINAPI dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef bool (WINAPI* DLL_Function_Connect_Net) (BSTR, long);
    ?

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 217
    Par défaut
    Oui, c'est vrai enfaite il n'y a pas de WINAPI, Je l'ai oublié en copiant, mais ça n'a pas d'effet.

    Par contre la dll est en Visual Basic

  4. #4
    screetch
    Invité(e)
    Par défaut
    et tu as eu ou la declaration de Z_Connect_NET?
    j'ai réussi a le faire marcher mais ca ne ressemble pas a ce que tu dis...

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 217
    Par défaut
    Bain enfaite, cette fonction sert à se connecter à un appareil de contrôle d'accès. la dll se nomme "zkemsdk.dll", je ne sais pas si ça te dis quelque chose.

  6. #6
    screetch
    Invité(e)
    Par défaut
    ta bibliotheque est un controle ActiveX ou un bidule du genre, je n'ai pas tout compris.
    Toujours est il qu'il y a un vrai moyen, propre, de le faire marcher, c'est de coder comme ca:

    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
    #include <windows.h>
    #include <tchar.h>
    #include <iostream>
    #include <comdef.h>
    #include "zkemsdk.h"
     
    int _tmain(int argc, _TCHAR* argv[])
    {
        HRESULT		hr;
        IZKEM	*zkem = NULL;
     
        // Now we will intilize COM
     
        hr = CoInitialize(0);
     
        // Use the SUCCEEDED macro and see if we can get a pointer 
     
        // to the interface
     
        if(SUCCEEDED(hr))
        {
            hr = CoCreateInstance( CLSID_CZKEM,
                        NULL,
                        CLSCTX_INPROC_SERVER,
                        IID_IZKEM, 
                        (void**) &zkem);
            VARIANT_BOOL result;
            BSTR IP_adresse = SysAllocString(L"192.168.1.201");
            const char* IP_adresse_char = "192.168.1.201";
            zkem->Connect_Net(IP_adresse, 4370, &result);
            std::cout << "Result [ " << result << " ]\n";
        }
     
     
        return 0;
    }
    avec les fichiers zkemsdk.h et zkemsdk_i.c générés a partir de la DLL.

    Dans l'ordre:
    * ouvre un CommandPrompt visual studio (celui que tu as, peu importe)
    * cd repertoire/du/sdk
    * regsvr32 zkemkeeper.dll
    * OleView.exe

    la, étend Type Libraries (le troisième... triangle, truc)
    tout a la fin tu devrais voir ta DLL, ZKEMKeeper
    double clic dessus
    il va te donner une fenetre avec du code IDL
    copie-colle le code IDL dans un fichier texte, zkemsdk.idl

    dans le command prompt:
    * midl zkemsdk.idl /h zkemsdk.h
    ca va générer un fichier .c et un fichier .h
    ajoute les deux a ton projet
    change le code avec ce que j'ai plus haut, qui est du "code" COM
    et hop, ca marche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur de lecture d'une dll
    Par matimatiksa dans le forum Simulink
    Réponses: 2
    Dernier message: 03/05/2015, 20h07
  2. realisation d une dll de lecture de memoire RAM
    Par mat26400 dans le forum Visual C++
    Réponses: 9
    Dernier message: 05/01/2007, 11h23
  3. Declarer une dll Delphi ?
    Par DelphiCool dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/07/2002, 10h07
  4. Equivalent à ExeName pour une DLL
    Par Smortex dans le forum Langage
    Réponses: 7
    Dernier message: 16/07/2002, 21h07
  5. Lecture d'une image bitmap
    Par Geronimo dans le forum x86 32-bits / 64-bits
    Réponses: 18
    Dernier message: 28/06/2002, 12h01

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