首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中传递从泛型继承的对象将导致IDispatch的强制转换异常

在C#中传递从泛型继承的对象将导致IDispatch的强制转换异常
EN

Stack Overflow用户
提问于 2016-02-16 17:14:33
回答 1查看 140关注 0票数 0

我想打个电话

代码语言:javascript
复制
[DispId(163)]
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = 
  MethodCodeType.Runtime)]
[return: MarshalAs(UnmanagedType.IDispatch)]
object CreatePropertyManagerPage
  ([MarshalAs(UnmanagedType.BStr), In] string Title,
   [In] int Options,
   [MarshalAs(UnmanagedType.IDispatch), In] object Handler,
   [In, Out] ref int Errors);

Handler属性是给我带来问题的属性。如果我传入一个继承自

代码语言:javascript
复制
public abstract class PmpBase<TMacroFeature,TData> : IPropertyManagerPage2Handler9

然后我得到一个InvalidCastException。但是,如果我移除泛型并传递一个继承自

代码语言:javascript
复制
public abstract class PmpBase : IPropertyManagerPage2Handler9

通过硬编码文件中的类型,然后对象传递到调用中。我可以复制同样的发现

代码语言:javascript
复制
new DispatchWrapper(foo)

其中,foo是从泛型(失败)和非泛型(传递)版本派生的类的实例。

我对COM一无所知,只是尝试使用solidworks的自动化界面。我是不是想做一些不可能的事。我没有发现任何将泛型与错误与COM关联的明显文章。

EN

回答 1

Stack Overflow用户

发布于 2016-02-17 06:32:41

我无法解释为什么会出现这个问题,但解决办法很容易。我为我试图传递给COM的接口创建了一个代理类。

代码语言:javascript
复制
public class PropertyManagerPage2Handler9Wrapper : IPropertyManagerPage2Handler9
{
    readonly IPropertyManagerPage2Handler9 _Implementation;

    public PropertyManagerPage2Handler9Wrapper(IPropertyManagerPage2Handler9 implementation)
    {
        _Implementation = implementation;
    }

    public void AfterActivation()
    {
        _Implementation.AfterActivation();
    }

    public void OnClose(int Reason)
    {
        _Implementation.OnClose(Reason);
    }

    public void AfterClose()
    {
        _Implementation.AfterClose();
    }

    <snip>
}

并将包装器传递给COM函数,而不是原始实例。然后就没有类强制转换异常。

代码语言:javascript
复制
var propertyManagerPage = SwApp.CreatePropertyManagerPage
     (_Name, options, new PropertyManagerPage2Handler9Wrapper(this), ref errors);

而不是这个

代码语言:javascript
复制
var propertyManagerPage = SwApp.CreatePropertyManagerPage
    (_Name, options, this, ref errors);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35438895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档