Type.GetTypeFromProgID 调用com组件

Type.GetTypeFromProgID 方法用于通过程序标识符(ProgID)获取 COM 类型。ProgID 是一个字符串标识符,用于标识 COM 组件。它通常在注册表中配置,并指向一个具体的 COM 类的 CLSID(类标识符)。

什么是 ProgID?

ProgID 是一个友好的、可读的标识符,用于引用 COM 类。它通常由公司名、产品名和类名组成。例如,"Excel.Application" 是 Excel 应用程序的 ProgID。ProgID 是在注册 COM 组件时指定的,并在 Windows 注册表中进行注册。

注册表中的 ProgID

注册表中与 ProgID 相关的部分通常如下所示:

HKEY_CLASSES_ROOT
  |- ProgID
      |- CLSID
          |- (default) = {CLSID}

例如,对于 MyComApplication.MyComObject

HKEY_CLASSES_ROOT
  |- MyComApplication.MyComObject
      |- CLSID
          |- (default) = {D8888888-8888-8888-8888-888888888888}

如何使用 GetTypeFromProgID

Type.GetTypeFromProgID 方法通过 ProgID 在注册表中查找对应的 CLSID,并返回与该 CLSID 对应的类型。以下是一个具体示例,展示如何使用该方法在 64 位程序中调用 32 位 COM+ 组件。

具体示例

1. 注册 32 位 COM 库

首先,确保你的 32 位 COM 库已正确注册,并已生成 TLB 文件。使用 regasm 工具注册:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe MyComLibrary.dll /codebase /tlb:MyComLibrary.tlb
2. 在组件服务中创建 COM+ 应用程序

按照之前的步骤,在组件服务中创建 COM+ 应用程序并添加 32 位 COM 库。

3. 在 64 位程序中调用 COM+ 组件

以下是一个示例,展示如何在 64 位程序中使用 ProgID 调用 COM+ 组件:

using System;
using System.Runtime.InteropServices;

[ComImport]
[Guid("A5E3D16E-5CE3-4D4F-8512-A7C13E34419D")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IMyComObject
{
    void MyMethod();
}

class Program
{
    static void Main(string[] args)
    {
        // 使用 ProgID 获取 COM 类型
        Type comType = Type.GetTypeFromProgID("MyComApplication.MyComObject");
        if (comType == null)
        {
            Console.WriteLine("Failed to get COM type.");
            return;
        }

        // 创建 COM 实例
        IMyComObject comObject = (IMyComObject)Activator.CreateInstance(comType);
        comObject.MyMethod();
        Console.WriteLine("COM method called successfully.");
    }
}

解释

  1. 获取 COM 类型

    Type comType = Type.GetTypeFromProgID("MyComApplication.MyComObject");
    

    这里的 "MyComApplication.MyComObject" 是注册在系统中的 ProgID。它在注册表中指向一个 CLSID,然后通过 CLSID 找到对应的 COM 类。

  2. 创建 COM 实例

    IMyComObject comObject = (IMyComObject)Activator.CreateInstance(comType);
    

    Activator.CreateInstance 方法使用类型信息创建 COM 对象的实例。

  3. 调用 COM 方法

    comObject.MyMethod();
    

    调用实例的方法。

通过这些步骤,你可以在 64 位程序中成功调用 32 位 COM+ 组件。确保 ProgID 正确,并且 COM 库已正确注册。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金士顿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值