2010-09-23 81 views
0

这个C++代码的C#等价物是什么?这个Canon SDK C++代码片段的等效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

我这里看不到任何C#特殊结构。有了适当的API,这应该可以用作C++。 – 2010-09-23 15:51:18

+1

@Michael - 我相信OP希望看到一个C#相当于什么 – 2010-09-23 15:54:01

+1

我认为OP有这个代码作为C++,并试图转换为C#,而不是相反。也就是说,它应该可以工作,但是因为您使用了指针,所以您需要使用'unsafe'关键字。 – Nate 2010-09-23 15:55:01

回答

2

这是一个粗糙翻译用于说明目的:

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已改为void,因为我们在C#中,而不是错误代码使用异常; EDSCALLBACK被定义为__stdcall这在这里是不相关的;代码只适用于所有隐含的类和方法存在;惯用的C#将使用event/EventHandler <T>/EventArgs而不是“N otifyObservers“方法;我假设你不想与C++做任何互操作)。

+1

我们也在C++中使用异常。这看起来像COM或类似的互操作API--没有严肃的理由,没有人会使用void *。 – Puppy 2010-09-23 16:28:04

+0

的确,只是说明。这将工作的可能性为零。 – 2010-09-23 16:31:40

4

字里行间 - 有a.Net 2.0包装(包括源代码),佳能SDK here和另一here