DLL ET CALLBACK

cepacepa Messages postés 9 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 29 juin 2007 - 28 avril 2006 à 11:38
cepacepa Messages postés 9 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 29 juin 2007 - 29 avril 2006 à 12:11
J'ai écrit une DLL en Delphi avec la fonction suivante :
Function AIS_Init(StrParam                            : PChar;
                  CallBackOnNewDatas_Position_Report  : TProcedure;
                  CallBackOnNewDatas_Static_Voyage    : TProcedure;
                  CallBackOnError                     : TProcedure) : Boolean




Dans un client écrit en C++, je n'arrive pas à trouver le type des éléments CallBack ...


Ainsi,j 'écris :


typedef bool (CALLBACK* DLL_Function_InitFunction) (CString,  LPDWORD, LPDWORD, LPDWORD);
DLL_Function_InitFunction pfn_InitFunction;


LRESULT CALLBACK OnNewDatas_Positions();
LRESULT CALLBACK OnNewDatas_Statics();
LRESULT CALLBACK OnError();


CString pour StrParam, je sais que LPDWORD n'est pas adapté pour les 3 autres arguments mais quoi mettre.


Ensuite j'effectue un :
// Chargement de la librairie
AISDll= LoadLibrary("AIS.dll");


// Initialisation des fontions
pfn_InitFunction = (DLL_Function_InitFunction)GetProcAddress(AISDll,"AIS_Init");


je pense pouvoir appelé ma fonction en faisant :


bool Result1 = pfn_InitFunction("9600 8 N 1 N",OnNewDatas_Positions,OnNewDatas_Statics,OnError);


Bon forcément ça plante parce que je sais pas quoi mettre comme type dans mon typeDef.


Quelqu'un peut-il m'aider ?
Merci

2 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 avril 2006 à 12:40
Pourquoi du CString, char* n'irait pas mieux ???

LPDWORD si tu dois modifier ce qui sera pointé par ces adresses sinon DWORD pour juste transmettre les valeurs.

ciao...
BruNews, MVP VC++
0
cepacepa Messages postés 9 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 29 juin 2007
29 avril 2006 à 12:11
Ok pour le char * , mais ça ne règle pas trop mon soucis : je peux lui déclarer des paramètres DWord alors que finalement je lui passe des Lresult callback ?? Je t'avoue que je ne maîtrise pas trop cela et surtout que je ne comprends pas trop le typage. Ce que je veux c'est capturer les évènements de la dll pour les exploiter après du style:

LRESULT CALLBACK OnNewDatas_Positions()
{
// Evènements prévus (nouvelle position d'un element graphique par exemple)

}

Si tu me dis que déclarer en LPDWORD, cela suffit pour cela, je vais voir ailleurs les raisons du plantage. merci.
0
Rejoignez-nous