【发布时间】:2016-04-24 08:34:07
【问题描述】:
我正在为一个小型非托管库编写VC++/CLI C# 接口。该库使用并实现了 WINAPI 方法,因此主要使用构造作为
DWORD getResult(__out LPWSTR* result);
也就是说它不返回请求的结果,而是返回一个状态码,并将请求的结果传入输出参数中。
在 C# 中,我似乎(至少)有两种编写接口的方式:
- 愚蠢地将其“转换”为
UInt32 getResult(String^% result); - 通过编写类似
String^ getResult();的方法在托管调用的状态码非零时抛出(例如)Win32Exception使接口更加“面向对象”(将状态码包装在其NativeErrorCode成员中) (如这里所示:Throwing a Win32Exception)
当然,在多输出函数的情况下,这不会那么简单,但假设我不关心它们。
由于我更习惯于 OOP 而不是 VC++ 编码风格,所以我更喜欢选项 2。但是,我不确定是否没有任何理由会导致这种糟糕的设计选择(或者是否存在不是第三种,甚至更好的方法)。
【问题讨论】:
-
95% 的可能性是这应该是 String^ GetResult() 并且对于任何错误代码都是一个例外。除非可能和预期会失败,否则应将其重命名为 TryGetResult()。
标签: c# .net c++-cli interop mixed-mode