DLL ET CALLBACK

Signaler
Messages postés
9
Date d'inscription
mardi 4 mai 2004
Statut
Membre
Dernière intervention
29 juin 2007
-
Messages postés
9
Date d'inscription
mardi 4 mai 2004
Statut
Membre
Dernière intervention
29 juin 2007
-
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

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
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++
Messages postés
9
Date d'inscription
mardi 4 mai 2004
Statut
Membre
Dernière intervention
29 juin 2007

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.