2010-09-23 96 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