Dll et Pointeurs de fonctions

phantom_2005 Messages postés 184 Date d'inscription mercredi 8 décembre 2004 Statut Membre Dernière intervention 1 septembre 2010 - 31 mai 2010 à 10:24
phantom_2005 Messages postés 184 Date d'inscription mercredi 8 décembre 2004 Statut Membre Dernière intervention 1 septembre 2010 - 31 mai 2010 à 11:52
Bonjour à tous,

j'ai un problème concernant l'appel d'une fonction dans une dll. Cette fonction prend comme argument un pointeur vers une fonction.

Voici mon architecture:

Dll (A) C++ (non managée) -> VC++ 6.0
|
|
Dll (B) C++ (managée) -> VS2005 ==> dll 'bridge' entre A et C
|
|
Applicatif (C) C#


Dans la dll A, j'ai la fonction suivante (inclus dans une classe 'CCan'):
void CCan::AjouterReception(int iId, int iMask, void (__cdecl *Traite)(messageStruct *))
{
...
}


Dans la dll B, je déclare un objet de la classe 'CCan' et je l'instancie.
J'ai la fonction equivalente (bridge):
void CCanBridge::AjouterReception(int iId, int iMask, void (__cdecl *Traite)(messageStruct *))
{
      Can->AjouterReception(iId, iMask, Traite)
}

A la compilation de la dll B, aucune erreur.

Dans l'applicatif C, j'ajoute en référence la dll B.
Je déclare un objet de la classe 'CCanBridge' et l'instancie.
Je vois bien toutes les fonctions de la dll B, sauf celle(s) contenant un pointeur de fonction en argument.


Ma question est comment remédier à ce problème?



Merci d'avance pour vos réponses.

-------------------------------------------------------------------------
Phantom_2005

1 réponse

phantom_2005 Messages postés 184 Date d'inscription mercredi 8 décembre 2004 Statut Membre Dernière intervention 1 septembre 2010 1
31 mai 2010 à 11:52
Question subsidiaire:

Dans la dll A, il y a la définition de la structure 'messageStruct' (dans le .h).
Dans la dll B, j'y accède sans problème.
Mais dans l'applicatif C, lorsque j'utilise la structure 'messageStruct', j'obtiens l'erreur suivante:
'messageStruct' est inaccessible en raison de son niveau de protection.


Si quelqu'un a une idée pour contourner ce problème.

Merci d'avance,

---------------------------------------------------------------------------
Phantom_2005
0
Rejoignez-nous