在C#中包装COM对象/动态类型
我目前正在使用托管代码中的COM对象,并使用新的动态类型。 这在一些领域运作良好,但可能成为其他领域的问题。
我一直在思考如何能够实现两全其美,动态类型(后期)的灵活性,支持说,RCW(早期)
以某种方式将动态类型包装成更易于管理的结构。 我想知道是否有一个首选的方法(如果它是一个好主意)或我应该考虑的事情。
我提出的两个基本思想如下:
首先,创建一个静态类,允许我以管理的方式调用动态类型的方法。
public static class ComObjectWrapper
{
public static void SomeMethod(dynamic comObject, int x)
{
comObject.someMethod(x);
}
public static bool GetSomeProp(dynamic comObject)
{
comObject.getSomeProp();
}
public static void SetSomeProp(dynamic comObject, bool foo)
{
comObject.setSomeProp(foo);
}
}
其次,创建一个使用com对象构造的类,然后将其所有成员映射到托管属性,方法等。
public class ComObjectWrapper
{
private dynamic comObject = null;
public ComObjectWrapper(dynamic comObject)
{
this.comObject = comObject;
}
public void SomeMethod(int x)
{
comObject.someMethod(x);
}
public bool SomeProp
{
get
{
return comObject.getSomeProp();
}
set
{
comObject.setSomeProp(value);
}
}
}
还有其他方法可以解决这个问题吗? 我错过了一些愚蠢的东西!?
开源框架Impromptu-Interface将使用静态接口包装一个动态对象,以便接口中所有静态定义的成员使用dlr转发给动态对象。
创建你的界面
IComObjectWrapper
{
void SomeMethod(int x);
bool SomeProp;
}
然后,你需要包装你的COM对象包括ImpromptuInterface
using ImpromptuInterface;
最后要包装它:
var tStaticTyped = Impromptu.ActLike<IComObjectWrapper>(comObject);
链接地址: http://www.djcxy.com/p/31891.html