此 Canon SDK C++ 代码片段的等效 C# 代码是啥?
Posted
技术标签:
【中文标题】此 Canon SDK C++ 代码片段的等效 C# 代码是啥?【英文标题】:What is the equivalent C# code for this Canon SDK C++ code snippet?此 Canon SDK C++ 代码片段的等效 C# 代码是什么? 【发布时间】:2010-09-23 15:48:53 【问题描述】:这个 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;
【问题讨论】:
我在这里看不到任何 C# 特定的构造。使用适当的 API,这应该像 C++ 一样工作。 @Michael - 我相信 OP 希望看到 C# 等价于它所做的任何事情 我认为 OP 将此代码作为 C++ 并试图转换为 C#,而不是相反。也就是说,它应该可以工作,但是您需要使用unsafe
关键字,因为您使用的是指针。
大声笑,我相信你是对的。这样做更有意义,因为如果有这些指针,这将是不安全的。
【参考方案1】:
字里行间 - 佳能 SDK here 和另一个 here 有一个 .Net 2.0 包装器(包括源代码)
【讨论】:
【参考方案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
【讨论】:
我们也在 C++ 中使用异常。在我看来,这就像 COM 或类似的互操作 API - 没有充分的理由,没有人会使用 void*。 确实,只是说明性的。这会奏效的几率为零。以上是关于此 Canon SDK C++ 代码片段的等效 C# 代码是啥?的主要内容,如果未能解决你的问题,请参考以下文章
System.arraycopy() 等效于 C、C++ 或 Objective-C
如何使用 Swift 使用此代码片段为 iOS 应用程序初始化 SDK?