0 0

C# 调用注册表的CLSID,并实例化,并且调用到里面的方法15

需求背景:公司目前在做一个金税打印的功能,存在一个问题,每次调用打印都会产生一个实例,而金税打印的插件有不能有多个实例,否则会报错。所以现在想出一个办法,就是通过C#编写一个ActiveX插件(相当于适配器的功能),通过C#编写的插件,来调用金税插件,采用单例模式,控制它只生成一个实例,目前存在如下问题:

1、怎么调用CLSID
2、调用到CLSID之后,怎么给他实例化
3、实例化之后,我怎么创建一个对应的类(如果是Object类型,那么这个实例就调用不到CLSID里面特有的那些属性了)

 

参考代码如下:

/// <summary>
/// 创建金税插件的对象
/// </summary>
/// <param name="clsid">金税插件的ClsId</param>
/// <returns></returns>
private static object GetActiveXObject(Guid clsid)
{
    Type t = Type.GetTypeFromCLSID(clsid);
    if (t == null)
    {
        return null;
    }
    return Activator.CreateInstance(t);
}

 

该代码创建出来的对象是Object类型的,所以没有金税插件应该有的属性和方法

请高手们提提建议该怎么解决?

如果说我的思路有问题,欢迎纠正!


问题补充:简单的说,就是一个问题

Activator.CreateInstance

创建出来的对象,怎么使用
2013年2月19日 13:44
目前还没有答案

相关推荐

    C#调用手动编写的COM组件

    接着,可以实例化COM组件的类,并调用其方法。例如,如果COM组件有一个名为`MyComClass`的类,可以这样使用: ```csharp using MyComNamespace; // 创建COM组件实例 MyComClass comInstance = new MyComClass...

    VC2015调用C#的DLL的范例

    - 使用`CoInitialize`初始化COM环境,然后通过`CoCreateInstance`函数创建C# DLL的实例,传入之前定义的CLSID。 - 调用C# DLL的方法时,通过接口指针调用相应的成员函数。 4. **错误处理**: - 在整个调用过程中...

    PHP调用C# COM提取文本

    3. **实例化COM对象**:在PHP中,你可以使用`com_create_guid()`函数创建一个唯一的GUID,然后用`com_load()`或`new COM()`来实例化C#的COM对象。 4. **调用方法**:通过`-&gt;`操作符,你可以调用C# COM组件提供的...

    这是一个VC调用VB控件的实例,通过这个实例可以让您了解如何在VC中去调用用VB开发的控件.zip

    4. **创建并实例化控件**:在VC的代码中,通过`CoCreateInstance`函数创建VB控件的实例。这个函数会根据类型库中的CLSID(Class ID)找到相应的类工厂,并创建对象。 5. **调用控件方法**:获取到控件的接口指针后...

    C# 代码注册大漠插件

    在IT领域,大漠插件通常是指用于自动化测试、网页抓取或数据分析的工具,而C#是一种广泛使用的编程语言,特别是在Windows应用开发中。本主题聚焦于如何使用C#代码来注册大漠插件的DLL文件,以便在C#项目中无缝集成并...

    exe作为com及其调用的例子

    调用注册后的exe COM组件时,其他应用程序(如VBScript、VBA、C#等)可以使用CoCreateInstance函数来实例化该组件,然后通过查询或强制转换获取接口指针,最后调用其方法。调用流程通常包括以下步骤: 1. 引用所需的...

    C#制作ActiveX

    在实际应用中,你可以在HTML页面中通过`&lt;object&gt;`标签引用你的ActiveX控件,或者在VB6、VBA等支持COM的环境中直接实例化并调用控件的方法。这样,你就能看到C#制作的ActiveX插件在实际场景中的工作效果。 总之,C#...

    检索 COM 类工厂中 CLSID 为 {96749377-3391-11D2-9EE3-00C04F797396} 的组件失败,适用于64位win7

    CLSID(Class Identifier)是每个COM对象的唯一标识,用于定位并创建对应的类工厂,从而实例化该组件。 错误信息"检索COM类工厂中CLSID为{96749377-3391-11D2-9EE3-00C04F797396}的组件失败"表明系统无法找到或者...

    进程外com组件实现win764位软件调用32位库

    - 在64位程序中,使用COM API(如`CoCreateInstance`和`QueryInterface`)创建并初始化32位COM组件的实例。 - 通过组件的接口调用32位库的方法。由于组件运行在独立的进程中,64位程序无需直接与32位库交互,从而...

    com_1.zip_调用COM

    3. **获取接口指针**:一旦组件实例化,就可以通过`QueryInterface`方法获取组件提供的接口。每个COM组件至少实现一个`IUnknown`接口,该接口提供了`AddRef`、`Release`和`QueryInterface`方法,用于管理组件引用...

    用C#创建SHELL扩展

    当执行这些操作时,系统会在注册表`HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks`项下查找已注册的Shell扩展组件信息,并实例化这些组件。 每个Shell扩展组件必须至少实现`...

    根据ProgID找出dll组件所在路径

    5. **调试和诊断**:在开发环境中,使用调试器(如Visual Studio的调试器)可以帮助跟踪`CreateObject`调用,观察其内部如何加载和实例化组件,从而找出DLL路径。 了解这些知识后,你就可以更有效地管理和维护基于...

    C# COM+ Programming(英文)免费下载

    COM+,全称为Component Object Model Plus,是...通过学习以上知识点,并结合《C# COM+ Programming》文档中的详细解释和实例,你可以掌握使用C#进行COM+编程的核心技巧,从而高效地开发出符合企业级需求的分布式组件。

    comdebug-src.rar

    注册表中存储了CLSID与组件实现的关系,使得其他组件能够找到并实例化它。 二、COM组件的创建 1. IDL(Interface Definition Language):创建COM组件通常从编写IDL文件开始,它定义了组件的接口和方法。 2. MIDL...

    COM 组件设计与应用

    2. 创建客户端:客户端程序使用COM组件提供的服务,通过CoCreateInstance函数创建组件实例,并调用其接口方法。 3. 错误处理:COM提供了HRESULT类型来表示操作结果,通过检查返回值可以判断操作是否成功。 4. 线程...

    COM Math dll project

    在客户端应用程序中,我们可以使用CoCreateInstance函数来实例化COM组件,然后通过QueryInterface获取接口指针,从而调用MathCOM中的方法。例如,我们可以在C#或VB.NET中使用Activator类的CreateInstance方法,或者...

    wince下JPG图片格式显示

    2. **加载JPG图片**:使用CoCreateInstance函数实例化IImage对象,传入CLSID_IImage作为参数,这会创建一个与IIMAGE接口关联的对象。然后,调用IImage对象的Load方法,传入JPG图片的路径,将图片加载到内存中。 3. ...

    com 技术内幕 及 源代码

    - **实现组件**: 编写组件类,实现接口中的方法,并完成IUnknown接口的实现。 - **创建类工厂**: 类工厂负责创建组件实例,实现IClassFactory接口。 - **编译与注册**: 编译源代码,然后通过regsvr32工具或其他...

    com原理与应用部分实例

    7. **自动化和支持**:学习如何使用VBA或VBScript等自动化工具来调用COM组件,以及如何使用ATL或MFC简化COM组件的开发。 在提供的`Samples`压缩包中,可能会包含上述各种概念的实际代码示例,帮助我们更好地理解和...

Global site tag (gtag.js) - Google Analytics