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:
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:
nResult = (* _AddFunc)(hInst, hCal,hWnd, workdir, (HANDLE)&tParam);
--
Voici le code source où la DLL a eté creer:
Code:
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_description">Citation:</div>
<div class="bbcode_quote printable">
<hr />
#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);\
<hr />
</div>
</div> |
Citation:
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...............