带有P/Invoke的DLL的C#包装器设计 我需要编写一个托管的(C++)包装,用于非托管C++ DLL。
假设我有一个这样的物体:带有P/Invoke的DLL的C#包装器设计 我需要编写一个托管的(C++)包装,用于非托管C++ DLL。,c#,pinvoke,wrapper,dllimport,C#,Pinvoke,Wrapper,Dllimport,假设我有一个这样的物体: public class ManagedObject { public void DoSomethingWithTheObject() { } } 假设doSomethingWithObject()方法必须调用非托管DLL方法 现在我想到了两个可以接受的可能性: public void DoSomethingWithTheObject() { DllWrapperClass.DirectCallToUnmanagedMethod(some_val
public class ManagedObject
{
public void DoSomethingWithTheObject()
{
}
}
假设doSomethingWithObject()方法必须调用非托管DLL方法
现在我想到了两个可以接受的可能性:
public void DoSomethingWithTheObject()
{
DllWrapperClass.DirectCallToUnmanagedMethod(some_value_type);
}
及
我基本上想问的是
我倾向于第二种选择,但我想听听其他一些意见,因为两种方法都有各自的优缺点。选择2。这是.NET Framework本身的基本原则之一:提供一组一致的托管库,无论它们包装的非托管API的形状如何
您的包装器应该尽可能遵循。当托管包装器开始感觉像纯C,而不是非托管DLL上的层时,您就会知道自己走对了方向。选项2。这是.NET Framework本身的基本原则之一:提供一组一致的托管库,无论它们包装的非托管API的形状如何
您的包装器应该尽可能遵循。当托管包装器开始感觉像是纯C,而不是非托管DLL上的层时,您就会知道自己走上了正确的道路。正如您所了解的,第二个选项总是更可取,但现在总是可能的。抽象非托管或不安全的部分更好,但有时客户端应用程序必须做出决策或提供许多信息。在后一种情况下,您最终编写了许多只模仿非托管类的类
通常,尽可能多地隐藏。正如您所想,第二种选择总是可取的,但现在总是可能的。抽象非托管或不安全的部分更好,但有时客户端应用程序必须做出决策或提供许多信息。在后一种情况下,您最终编写了许多只模仿非托管类的类
一般来说,尽量隐藏起来。谢谢。我也有同样的想法。谢谢。我有完全相同的想法。
public void DoSomethingWithTheObject()
{
DllWrapperClass.MethodName(this);
}