首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >COM互操作:如何从LPDISPATCH获取CCW?

COM互操作:如何从LPDISPATCH获取CCW?
EN

Stack Overflow用户
提问于 2011-02-04 01:13:32
回答 1查看 947关注 0票数 0

我正在用C#编写一个应用程序,它通过IDispatch连接到一个旧的skool COM对象。我用这种代码来做这件事:

代码语言:javascript
复制
public sealed class Attachments
{
    Object comObject;
    Type type;

    private readonly static Attachments _instance = new Attachments();
    public static Attachments Instance  { get { return _instance; } }

    private Attachments()
    {
        type = Type.GetTypeFromProgID("WinFax.Attachments");
        if (type == null)
            throw new ArgumentException("WinFax Pro is not installed.");
        comObject = Activator.CreateInstance(type);
    }

    public Int16 Count()
    {
        Int16 x = (Int16) type.InvokeMember("Count",
                                            BindingFlags.InvokeMethod,
                                            null,
                                            comObject,
                                            null);
        return x;
    }
    ....

这个IDispatch接口上的一个方法返回一个LPDISPATCH,我认为它是一个指向IDispatch的长指针。它是另一个COM对象,ProgId WinFax.Attachment。(WinFax.Attachments管理WinFax.Attachment对象的集合。)

在C#中,如何调用与该LPDISPATCH对应的COM对象上的方法?我可以这样做吗:

代码语言:javascript
复制
    Object o = type.InvokeMember("MethodReturnsLpdispatch",
                                     BindingFlags.InvokeMethod,
                                     null,
                                     comObject,
                                     null);
    Type t2 = Type.GetTypeFromProgID("WinFax.Attachment"); // different ProgId !!
    Object x = t2.InvokeMember("MethodOnSecondComObject",  
                                     BindingFlags.InvokeMethod,
                                     null,
                                     o,
                                     null);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-04 01:33:36

是的,这是可行的:

代码语言:javascript
复制
    Type type = Type.GetTypeFromProgID("WinFax.Attachments");
    if (type == null)
          throw new ArgumentException("WinFax Pro is not installed.");
    Object comObject = Activator.CreateInstance(type);  
    Object o2 = type.InvokeMember("MethodReturnsLpdispatch",
                                     BindingFlags.InvokeMethod,
                                     null,
                                     comObject,
                                     null);
    Type t2 = Type.GetTypeFromProgID("WinFax.Attachment"); // different ProgId !!
    Object x = t2.InvokeMember("MethodOnSecondComObject",  
                                     BindingFlags.InvokeMethod,
                                     null,
                                     o2,
                                     null);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4889298

复制
相关文章

相似问题

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