2010-09-23 6 views
0

Quel est l'équivalent C# de ce code C++?Quel est le code C# équivalent pour cet extrait de code Canon SDK C++?

private: 
    static EdsError EDSCALLBACK ProgressFunc (
         EdsUInt32 inPercent, 
         EdsVoid * inContext, 
         EdsBool * outCancel 
         ) 
    { 
     Command *command = (Command *)inContext; 
     CameraEvent e("ProgressReport", &inPercent); 
     command->getCameraModel()->notifyObservers(&e); 
     return EDS_ERR_OK; 
    } 
+1

Je ne vois pas de constructions spécifiques C# ici. Avec les API appropriées, cela devrait fonctionner en C++. –

+1

@Michael - Je crois que OP souhaite voir un équivalent C# de tout ce que cela fait –

+1

Je pense que l'OP a ce code en C++ et essaie de convertir en C#, pas l'inverse. Cela dit, cela devrait fonctionner, mais vous devrez utiliser le mot-clé 'unsafe' puisque vous utilisez des pointeurs. – Nate

Répondre

2

C'est une grossière traduction à des fins d'illustration:

private static void ProgressFunc(uint percent, object context, out bool cancel) 
{ 
    Command command = (Command)context; 
    CameraEvent e = new CameraEvent("ProgressReport", percent); 
    command.GetCameraModel().NotifyObservers(e); 
    cancel = false; 
} 

(EdsError a été modifié pour void, parce que nous utilisons des exceptions en C# au lieu des codes d'erreur, EDSCALLBACK est défini comme __stdcall qui n'est pas pertinent ici, le code ne fonctionne que si toutes les classes et méthodes impliquées existent, C# idiomatique serait l'utilisation de event/EventHandler <T>/EventArgs au lieu d'un "N otifyObservers "méthode; Je suppose que vous ne voulez pas faire interop avec C++).

+1

Nous utilisons aussi des exceptions en C++. Cela ressemble à COM pour moi ou une API similaire - personne n'utiliserait un vide * sans une raison sérieuse. – Puppy

+0

En effet, juste illustratif. Les chances que cela fonctionnera sont nulles. –

4

lecture entre les lignes - il y a wrapper a.Net 2.0 (y compris le code source) pour le SDK Canon here et un autre here

Questions connexes