[activeX] comment faire pour que ma fonction retourne une valeur?
Bonjour,
ça fait une éternité que je n'ai plus touché aux joyeusetés de microsoft (MFC, ATL, etc...), et je n'y comprend plus rien :aie:
Nous avons récupéré un activeX, et nous devons y ajouter une gestion des erreurs. Pour ce faire nous aimerions que nos méthodes renvoient un code d'erreur (long). Mais on ne sait pas comment faire.
Donc voilà, nouc avons des fonctions "wrappées" dans le fichier idl, qui ressemble à ceci:
Code:
1 2 3 4
| [id(IECISA_ACTIVE_X_ID_DELCERTSERIAL), helpstring( "method delCertBySerial")] void delCertBySerial([in]BSTR SerialNumber);
[id(IECISA_ACTIVE_X_ID_DELCERTUSAGE), helpstring( "method delCertByUsage")] void delCertByUsage([in]BSTR strKeyUsage);
[id(IECISA_ACTIVE_X_ID_GETTOKENSERIAL), helpstring( "method GetTokenSerialNumber")] void GetTokenSerialNumber([out]BSTR SerialNumber);
// etc... |
Ces fonctions sont implémentées dans un fichier cpp à côté.
Jusqu'ici, tout va bien. Ca fonctionne et tout.
Maintenant, nous voudrions que ces fonctions nous retournent un long.
Prenons l'exemple de la fonction GetTokenSerialNumber. Nous avons essayé ceci:
Code:
1 2 3
| [id(IECISA_ACTIVE_X_ID_GETTOKENSERIAL), helpstring(
"method GetTokenSerialNumber")] long GetTokenSerialNumber([out]BSTR
SerialNumber); |
et de modifier le code cpp de cette fonction pour qu'elle retourne un long. Mais aprés ces modifications, le code compile, mais:
1/ les points d'arrêts dans notre fonction ne fonctionnent plus (le débuggeur ne s'y arête pas).
2/ notre fonction ne retourne rien.
Savez-vous ce qu'il se passe? Auriez-vous des conseils pour m'aider à m'en sortir.
ps: j'ai bien relu en détail le tuto de farscape pour créer un activeX avec la MFC, mais le problème de retour de valeur n'y est pas abordé.
reour de valeur des activeX
Si la fonction retourne effectivement un long , il faut ecrire
Code:
1 2 3 4
|
[id(IECISA_ACTIVE_X_ID_GETTOKENSERIAL), helpstring(
"method GetTokenSerialNumber")] void GetTokenSerialNumber([out]LONG
SerialNumber); |
il manque juste un petit detail
Le detail :
au lieu de [out]LONG
il faut mettre [out,retval]LONG pour que la fonction retourne une valeur
sinon c'est un parametre de fonction par reference ....
j'ai été trop rapide pour répondre ...
je n'avais pas bien vu le contexte ....
jusqu'a present la fonction ne retournait aucune valeur mais modifiait SerialNumber qui etait passé par reference.
Si on veut ajouter une valeur de retour numerique ( errValue )on doit ecrire
Code:
1 2 3 4 5
|
[id(IECISA_ACTIVE_X_ID_GETTOKENSERIAL), helpstring(
"method GetTokenSerialNumber")] void GetTokenSerialNumber([out]BSTR
SerialNumber, [out,retval]LONG errValue); |
et si je me suis encore trompé merci de le signaler ....
C'est toujours difficile de faire des reponses rapides avec 0 bug