如何在 C# 中向 COM 对象添加功能?
How can I add functionality to COM object in c#?
我是 COM 和 c# 的新手,我想向第三方程序公开的 COM 对象添加功能。
最初我的意图是继承 COM 对象 class,但我发现它并不是那么简单(例如 here)。
目前,我有两个接口(即IComAuto
和ComAuto
)和一个关联的class(ComAutoClass
)。
为了将我的自定义方法添加到 ComAuto
对象,我创建了一个 class ComObjectWrapper
继承自该接口并通过在中存储一个 ComAuto
对象来实现它私人领域。
class ComObjectWrapper : ComAuto
{
private readonly ComAuto ComObj;
public ComObjectWrapper() : base()
{
ComObj = new ComAuto();
}
public short method1(object param)
{
return ComObj.method1(param);
}
...
}
我觉得这不是最好的方法,因为我需要将对原始方法的任何调用重定向到内部 ComAuto
对象。
我尝试通过在 VS2015 中将 Embed Interop types
属性 设置为 false
来直接从 ComAutoClass
继承。当我已经编写的代码需要 string
时,这导致一些方法将 return 值设为 object
。因此,我将不得不检查所有编写的代码以向 string
添加一些强制转换。不理想,而且我不完全了解 Embed Interop types
是什么。
如果有人能阐明这一点或指出一些有用的文章(到目前为止我在 MSDN 上发现的内容对于像我这样的初学者来说听起来有点神秘),我将不胜感激。
听起来像是 extension methods 的完美用例:
public static class ComAutoExtensions
{
public static short Method1( this ComAuto com, object param )
{
return com.GetShortValue( param );
}
}
我是 COM 和 c# 的新手,我想向第三方程序公开的 COM 对象添加功能。
最初我的意图是继承 COM 对象 class,但我发现它并不是那么简单(例如 here)。
目前,我有两个接口(即IComAuto
和ComAuto
)和一个关联的class(ComAutoClass
)。
为了将我的自定义方法添加到 ComAuto
对象,我创建了一个 class ComObjectWrapper
继承自该接口并通过在中存储一个 ComAuto
对象来实现它私人领域。
class ComObjectWrapper : ComAuto
{
private readonly ComAuto ComObj;
public ComObjectWrapper() : base()
{
ComObj = new ComAuto();
}
public short method1(object param)
{
return ComObj.method1(param);
}
...
}
我觉得这不是最好的方法,因为我需要将对原始方法的任何调用重定向到内部 ComAuto
对象。
我尝试通过在 VS2015 中将 Embed Interop types
属性 设置为 false
来直接从 ComAutoClass
继承。当我已经编写的代码需要 string
时,这导致一些方法将 return 值设为 object
。因此,我将不得不检查所有编写的代码以向 string
添加一些强制转换。不理想,而且我不完全了解 Embed Interop types
是什么。
如果有人能阐明这一点或指出一些有用的文章(到目前为止我在 MSDN 上发现的内容对于像我这样的初学者来说听起来有点神秘),我将不胜感激。
听起来像是 extension methods 的完美用例:
public static class ComAutoExtensions
{
public static short Method1( this ComAuto com, object param )
{
return com.GetShortValue( param );
}
}