需求背景:公司目前在做一个金税打印的功能,存在一个问题,每次调用打印都会产生一个实例,而金税打印的插件有不能有多个实例,否则会报错。所以现在想出一个办法,就是通过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类型的,所以没有金税插件应该有的属性和方法
请高手们提提建议该怎么解决?
如果说我的思路有问题,欢迎纠正!
相关推荐
接着,可以实例化COM组件的类,并调用其方法。例如,如果COM组件有一个名为`MyComClass`的类,可以这样使用: ```csharp using MyComNamespace; // 创建COM组件实例 MyComClass comInstance = new MyComClass...
- 使用`CoInitialize`初始化COM环境,然后通过`CoCreateInstance`函数创建C# DLL的实例,传入之前定义的CLSID。 - 调用C# DLL的方法时,通过接口指针调用相应的成员函数。 4. **错误处理**: - 在整个调用过程中...
3. **实例化COM对象**:在PHP中,你可以使用`com_create_guid()`函数创建一个唯一的GUID,然后用`com_load()`或`new COM()`来实例化C#的COM对象。 4. **调用方法**:通过`->`操作符,你可以调用C# COM组件提供的...
4. **创建并实例化控件**:在VC的代码中,通过`CoCreateInstance`函数创建VB控件的实例。这个函数会根据类型库中的CLSID(Class ID)找到相应的类工厂,并创建对象。 5. **调用控件方法**:获取到控件的接口指针后...
在IT领域,大漠插件通常是指用于自动化测试、网页抓取或数据分析的工具,而C#是一种广泛使用的编程语言,特别是在Windows应用开发中。本主题聚焦于如何使用C#代码来注册大漠插件的DLL文件,以便在C#项目中无缝集成并...
调用注册后的exe COM组件时,其他应用程序(如VBScript、VBA、C#等)可以使用CoCreateInstance函数来实例化该组件,然后通过查询或强制转换获取接口指针,最后调用其方法。调用流程通常包括以下步骤: 1. 引用所需的...
在实际应用中,你可以在HTML页面中通过`<object>`标签引用你的ActiveX控件,或者在VB6、VBA等支持COM的环境中直接实例化并调用控件的方法。这样,你就能看到C#制作的ActiveX插件在实际场景中的工作效果。 总之,C#...
CLSID(Class Identifier)是每个COM对象的唯一标识,用于定位并创建对应的类工厂,从而实例化该组件。 错误信息"检索COM类工厂中CLSID为{96749377-3391-11D2-9EE3-00C04F797396}的组件失败"表明系统无法找到或者...
- 在64位程序中,使用COM API(如`CoCreateInstance`和`QueryInterface`)创建并初始化32位COM组件的实例。 - 通过组件的接口调用32位库的方法。由于组件运行在独立的进程中,64位程序无需直接与32位库交互,从而...
3. **获取接口指针**:一旦组件实例化,就可以通过`QueryInterface`方法获取组件提供的接口。每个COM组件至少实现一个`IUnknown`接口,该接口提供了`AddRef`、`Release`和`QueryInterface`方法,用于管理组件引用...
当执行这些操作时,系统会在注册表`HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks`项下查找已注册的Shell扩展组件信息,并实例化这些组件。 每个Shell扩展组件必须至少实现`...
5. **调试和诊断**:在开发环境中,使用调试器(如Visual Studio的调试器)可以帮助跟踪`CreateObject`调用,观察其内部如何加载和实例化组件,从而找出DLL路径。 了解这些知识后,你就可以更有效地管理和维护基于...
COM+,全称为Component Object Model Plus,是...通过学习以上知识点,并结合《C# COM+ Programming》文档中的详细解释和实例,你可以掌握使用C#进行COM+编程的核心技巧,从而高效地开发出符合企业级需求的分布式组件。
注册表中存储了CLSID与组件实现的关系,使得其他组件能够找到并实例化它。 二、COM组件的创建 1. IDL(Interface Definition Language):创建COM组件通常从编写IDL文件开始,它定义了组件的接口和方法。 2. MIDL...
2. 创建客户端:客户端程序使用COM组件提供的服务,通过CoCreateInstance函数创建组件实例,并调用其接口方法。 3. 错误处理:COM提供了HRESULT类型来表示操作结果,通过检查返回值可以判断操作是否成功。 4. 线程...
在客户端应用程序中,我们可以使用CoCreateInstance函数来实例化COM组件,然后通过QueryInterface获取接口指针,从而调用MathCOM中的方法。例如,我们可以在C#或VB.NET中使用Activator类的CreateInstance方法,或者...
2. **加载JPG图片**:使用CoCreateInstance函数实例化IImage对象,传入CLSID_IImage作为参数,这会创建一个与IIMAGE接口关联的对象。然后,调用IImage对象的Load方法,传入JPG图片的路径,将图片加载到内存中。 3. ...
- **实现组件**: 编写组件类,实现接口中的方法,并完成IUnknown接口的实现。 - **创建类工厂**: 类工厂负责创建组件实例,实现IClassFactory接口。 - **编译与注册**: 编译源代码,然后通过regsvr32工具或其他...
7. **自动化和支持**:学习如何使用VBA或VBScript等自动化工具来调用COM组件,以及如何使用ATL或MFC简化COM组件的开发。 在提供的`Samples`压缩包中,可能会包含上述各种概念的实际代码示例,帮助我们更好地理解和...