J'ai une fonction, singleFrameEventHandler, que je souhaite appeler lorsqu'un événement donné, OnNewFrame, se produit. Après quelques recherches, il m'a semblé que les fonctions qui gèrent les événements ont un type de retour void et prennent un paramètre du type qui contient l'événement. D'après ce que je pouvais trouver en ligne, ce qui se fait comme ceci:Gestion des événements en C++/CLI
déclaration de fonction:
void singleFrameEventHandler(IAFrame^frame);
Lorsque la fonction est assignée à gérer l'événement:
iaframe->OnNewFrame += &singleFrameEventHandler;
Lorsque je tente de compiler le code contenant les segments ci-dessus, j'obtiens l'erreur suivante:
error C2664: 'Spiricon::BeamGage::Automation::Interfaces::IAFrame::OnNewFrame::add' : cannot convert parameter 1 from 'void (__clrcall *)(Spiricon::BeamGage::Automation::Interfaces::IAFrame ^)' to 'Spiricon::BeamGage::Automation::Interfaces::newFrame ^'
No user-defined-conversion operator available, or
There is no context in which this conversion is possible
Le OnNewF La rame est de type Spiricon :: BeamGage :: Automation :: Interfaces :: newFrame, qui malheureusement n'a pas de documentation au-delà d'être décrite comme "L'événement qui est appelé quand un nouveau cadre est disponible."
Dans le navigateur d'objets, je peux trouver des informations à ce sujet: (?)
public delegate newFrame:
public System.IAsyncResult BeginInvoke(System.AsyncCallback callback, System.Object object)
public System.Void EndInvoke(System.IAsyncResult result)
public System.Void Invoke()
public newFrame(System.Object object, System.IntPtr method)
Le constructeur newFrame semble être le meilleur pari, car il semble prendre un pointeur de méthode, mais lorsque je tente pour l'utiliser comme ceci:
iaframe->OnNewFrame += gcnew newFrame(iaframe, &singleFrameEventHandler);
Je reçois l'erreur suivante:
error C3352: 'singleFrameEventHandler' : the specified function does not match the delegate type 'void (void)'
ce que cela signifie t Ma fonction ne doit-elle pas prendre de paramètres? Si oui, comment aurais-je des informations sur l'événement?
Très bien, merci. J'ai également découvert que lorsque j'obtiens un IAFrame (qui inclut également des données pour une trame individuelle en plus de l'événement) de l'usine, j'obtiens la dernière image, donc je n'ai pas besoin du gestionnaire d'événement pour avoir un objet IAFrame passé à lui. –