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 :

Ecrire d'un Test_EXE pour ma DLL et le passer les parametres


Sujet :

C++

  1. #1
    Nouveau candidat au Club
    Inscrit en
    Mai 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 1
    Par défaut Ecrire d'un Test_EXE pour ma DLL et le passer les parametres
    Bonjour à tous,

    Suis desolé si je pose la question ki est peut être dejà plusiuers fois sur le beau site revenu. Mais ca fait bail ke j'essaie d'ecrire ce test, mais helas. Bon je pose le probleme:

    le project s'appelle A et comme resultat du project , on a une dll nommée A.dll. Dans la DLL on a une serie de fonction. et cette DLL marche dejà tres bien avec un autre langage de programmation où l'appel de la dll se fait rapidement suivant:
    callDLL("ma dll",""maFonction", "Parametre"), dans parametre, on a parameterIn , parametreOut, parametreInTyp, parameterOutTyp.

    De cette maniere je veux aussi la tester dans le language d'origne de la DLL en C/C++ mais malheuresement je me heurte au passage de parametres.

    j'ai essayé d'appeller la dll dynamikement, elle fonctione. Mon probleme se situe comme le passer les parametres ki est un HANDLE.
    Voici une petit partie de mon code d'appel:
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    #include <stdafx.h>
    // Test2.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    #include <iostream>
    #include <windows.h>
    #include "ARRAY.H"
    #include "N_STRING.H"
    #include "nc_var.h"
    #include <TCHAR.H>
     
     
    typedef int (__stdcall WINAPI *AddFunc)(HINSTANCE hInst,WORD hCal,HWND hwNd,LPCTSTR workdir, HANDLE tParam);
    extern "C"  int CSDParameterRet(char *);
     
    //struktur tParam
    typedef struct 
    {
    	LPCSTR pszInArr;	
    	LPCSTR pszInTyp;
    	LPCSTR pszOutArr;
    	LPCSTR pszOutTyp;
    	LPCSTR pszDllName;
    	LPCSTR pszProcName;
    }EXTDLL_PARAM_T;
     
     
    using namespace std;
     
    int main()
    {
       AddFunc _AddFunc;
     
       int nResult =0;
       //parameter
     
       char* hParam;
     
     
    //   FunctionFunc _FunctionFunc;
       HINSTANCE hInstLibrary = LoadLibrary("A.dll");
     
     
     
       if (hInstLibrary)
       {
          _AddFunc = (AddFunc)GetProcAddress(hInstLibrary, "CallParameterRet");
      //    _FunctionFunc = (FunctionFunc)GetProcAddress(hInstLibrary,"Function");
     
          if (_AddFunc)
    	  {
    		  HINSTANCE hInst = LoadLibrary("B.dll");
    		  WORD hCal = (WORD)GetProcAddress(hInst,"ExtDll_GetLPSTR")	;
    		  //ausgabe
    		  cout << "HCAL: "<< hCal <<"\n";
    		    cout << "HINSTANCE: "<< hInst;
    		  HWND hWnd = NULL;
    		  LPCTSTR workdir = "C:/VC/Test2/";
    			 cout <<"result1: " ;
    		  //set Info
    		  EXTDLL_PARAM_T tParam;
     
    		  tParam.pszInArr = "test";
    		  cout <<"result1: " ;
    		  tParam.pszInTyp = "";
    		  tParam.pszOutArr = "";
    		  tParam.pszOutTyp = "";
    //		  N_String nstrDLLName;
    //		  nstrDLLName.AssignTStr("A.dll");
    		  tParam.pszDllName = "A.dll";
    		  tParam.pszProcName = "CSDParameterRet";
    			cout <<"result2: " ;
    			//mon probleme
     
    		  nResult = (* _AddFunc)(hInst, hCal,hWnd, workdir, (HANDLE)&tParam);
     
     
     
    		  cout <<"result: " << nResult;
     
          }
     
          FreeLibrary(hInstLibrary);
       }
       else
       {
          std::cout << "DLL Failed To Load!" << std::endl;
       }
     
       std::cin.get();
     
       return nResult;
    }
    je reussi à rentrer dans la fonction mais il bloke apres ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     nResult = (* _AddFunc)(hInst, hCal,hWnd, workdir, (HANDLE)&tParam);
    --

    Voici le code source où la DLL a eté creer:
    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
    #include "StdAfx.h"
    #include "mainclass.h"
     
    static mainclass *m_pMain;
     
    Macro (CallParameterRet)
    {	
    	LPSTR pszBDA;
    	CSD_GETLPSTR(0,&pszBDA);
    	AfxMessageBox(pszBDA);
    	return 0;
    }
    le Header file est le suivant:
    <div class="bbcode_container">
    	<div class="bbcode_quote">
    		<div class="quote_container">
    			<div class="bbcode_quote_container"></div>
     
    				#define GETLPSTR(idx, var) \
    (*(EXTDLLPROC_GETLPSTR_T)GetProcAddress(hInst, "ExtDll_GetLPSTR"))(hParam, idx, var, 0)
     
    #define Macro(PROC_NAME) \
    int WINAPI PROC_NAME(HINSTANCE CSD_hInst, WORD ChCal,HWND hWnd, LPCTSTR pszWorkDir, HANDLE hParam)
    // Type safe macros to get call parameters
     
     
    typedef int (WINAPI *CSD_EXTDLLPROC_GETLPCTSTR_T)(HANDLE hParam, unsigned uIdx, TYPE* pVar, int nVarLen);\
    CSD_EXTDLLARG_API BOOL CSD_ExtDll_GetLPCTSTR(HANDLE hParam, unsigned uIdx, TYPE* pVar, int nVarLen);\
    			
    		</div>
    	</div>
    </div>

    Dans le Header de la MainClass où la DLL a ete concu, on a les fonction comme CallParameterRet(LPCTSTR). Ca veut peut etre dire ke cette fonction n'acepte ke ce parametere mais je ne crois d'après la construction de leur Header file. AIDE AIDE AIDE
    Merci encore pour votre temps. Mon but normaleemnt est de wrapper cela en Java mais aussi longtemps ke je ne sache pas son test dans son propre est fait, je n#avancerais pas. c est pkoi je voulais d'abors ecrire u Test_EXE en C.

    bonne journée...............

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    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 392
    Par défaut
    J'ai du mal à comprendre le problème.
    • Tu peux appeler toute fonction dont tu connaisse le prototype à la compilation du module appelant.
    • Par contre, pour une fonction dont le prototype n'est connu que dynamiquement et peut être n'importe quoi, tu ne peux plus utiliser de pointeurs de fonction ordinaires.

    Dans quel cas es-tu précisément ?

    De plus, tu nous parles juste de A.DLL, mais le code parle aussi de B.DLL...
    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. Répertoire courant pour une DLL
    Par jaduta dans le forum Delphi
    Réponses: 2
    Dernier message: 02/04/2007, 09h10
  2. [C#] Y a-t-il un accesseur Auteur pour une Dll ?
    Par cathar_rhythm dans le forum C#
    Réponses: 3
    Dernier message: 15/08/2006, 17h32
  3. Question sur exports et les classes (pour une dll)
    Par DjPoke dans le forum Langage
    Réponses: 7
    Dernier message: 08/08/2005, 19h25
  4. result: chaine de caractère pour une DLL
    Par Sephiroth Lune dans le forum Langage
    Réponses: 7
    Dernier message: 27/07/2004, 23h05
  5. Equivalent à ExeName pour une DLL
    Par Smortex dans le forum Langage
    Réponses: 7
    Dernier message: 16/07/2002, 21h07

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