Advertisement

C++ COM 组件的构建。

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
可运行的C++ COM组件实现方法,其中C++ COM作为一种接口技术,为客户程序提供了调用其他程序的便捷途径。 现有的关于COM原理和技术的文献浩如烟海,因此在此篇章中,我们将侧重于实际的实现细节。 以下将分若干步骤对进程内COM组件进行编码,旨在清晰地理解如何构建一个COM组件,并通过COM接口方法调用DLL中的函数。 首先,我们需要创建一个标准的win32 DLL项目命名为mycom。DLL的主入口函数(dllmain)的实现如下: ```c++ DWORD g_dwAttachedProcesses = 0L; // # of attached processes DWORD g_dwPageSize = 0L; // System page size HINSTANCE g_hInstance = 0L; // Instance Handle LONG g_cLock = 0L; // # of outstanding objects BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { BOOL fRetVal = FALSE; SYSTEM_INFO SystemInformation; switch(ul_reason_for_call) { case DLL_PROCESS_ATTACH: // Assume successfully initialized fRetVal = TRUE; // Do one-time initialization when first process attaches if(!g_dwAttachedProcesses) { g_hInstance = (HINSTANCE)hModule; // Get the system page size if(!g_dwPageSize) { GetSystemInfo( &SystemInformation ); // cant fail } g_dwPageSize = SystemInformation.dwPageSize; } } return fRetVal; } ```

全部评论 (0)

还没有任何评论哟~
客服
客服
  • C++ COM实现方法
    优质
    本文章介绍了如何使用C++语言来创建COM(Component Object Model)组件的方法和技术,旨在帮助开发者更好地理解和运用COM技术。 COM(组件对象模型)是一种接口技术,它提供了一种方法使客户程序能够调用。关于COM原理和技术的文章已经有很多了,在这里不再过多讲解。本段落将着重于实现过程,并通过编码步骤来清晰地展示如何创建一个进程内COM组件,目的是让客户程序可以通过COM接口调用DLL中的函数。 首先,我们需要创建一个标准的Win32 DLL项目(例如命名为mycom)。以下是DllMain入口的具体实现: ```c++ DWORD g_dwAttachedProcesses = 0L; // 进程附加次数 DWORD g_dwPageSize = 0L; // 系统页面大小 HINSTANCE g_hInstance = 0L; // 实例句柄 LONG g_cLock = 0L; // 活动对象数量 BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { BOOL fRetVal = FALSE; SYSTEM_INFO SystemInformation; switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: fRetVal = TRUE; // 假设初始化成功 if (!g_dwAttachedProcesses) // 当第一个进程附加时进行一次性初始化 { g_hInstance = (HINSTANCE)hModule; if(!g_dwPageSize) { GetSystemInfo(&SystemInformation); // 获取系统页面大小,此操作不会失败 g_dwPageSize = SystemInformation.dwPageSize; } } } return fRetVal; } ```
  • Delphi中COM与应用
    优质
    本教程深入浅出地讲解了在Delphi开发环境中如何创建和使用COM(Component Object Model)组件。通过实例详细介绍了COM组件的基本概念、创建步骤及其实用技巧,帮助开发者轻松掌握其应用方法。 这段文字可以被改写为:这能够帮助初学者很好地了解COM组件的使用和创建。
  • COM.chm
    优质
    《COM组件.chm》是一本内容详尽的电子手册,旨在帮助用户深入了解和掌握Windows操作系统下的COM组件技术,适合开发者学习参考。 com组件.chm文件通常用于提供关于特定COM组件的文档和支持信息。这类文件采用HTML帮助格式(.chm),便于用户查询相关API、类库以及使用方法等详细内容,是开发人员学习和参考的重要资料之一。
  • C#中COM注册和调用
    优质
    本文介绍了在C#编程环境中如何注册与使用COM组件的方法,包括注册步骤及代码层面的调用技巧。 安装了VS 2012(64位)后,请根据以下路径找到gacutil.exe 和 regasm.exe: - gacutil.exe 路径:C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools - regasm.exe 路径:C:\Windows\Microsoft.NET\Framework64\v4.0.30319 接着单独建立一个文件夹,放入需要操作的dll和tlb 文件。然后将上述路径添加到电脑环境变量PATH中。 在管理员权限下的控制台输入以下命令: 1、先使用 `cd /d dll路径` 命令进入包含dll文件的目录。 2、执行 `gacutil /i dll文件名.dll` 将dll文件安装到全局程序集缓存(GAC)。 3、运行 `regasm dll文件名.dll /tlb:dll文件名.tlb` 注册该dll及其对应的类型库。 完成以上步骤后,将会看到相应的成功信息。
  • C#使用COM方法总结
    优质
    本文档对在C#编程环境中如何有效地使用和集成COM(Component Object Model)组件的方法进行了全面总结,旨在帮助开发者解决兼容性和互操作性问题。 本段落总结了C#调用COM组件的方法,并详细介绍了将COM类型信息转换为.NET元数据、查看元数据以及编写测试程序等多个步骤。 一、 将COM类型信息转化为.NET元数据:在使用C#调用COM组件时,第一步是需要将COM类型的描述文件(通常为Tlb格式)通过一个名为Tlbimp.exe的工具转译成适用于.NET环境的数据结构。这种转换使得原本只能被非托管代码使用的COM对象能够与.NET程序进行交互。 二、 查看元数据:完成上述步骤后,下一步便是利用ILDasm这样的工具来查看由Tlbimp生成的.NET元数据文件的具体内容和细节了。这一步骤有助于开发者更好地理解这些新创建的数据结构,并确保它们符合预期的功能需求。 三、 编写测试程序:为了验证COM组件是否能够成功地在C#项目中运行,下一步是构建一个简单的控制台应用程序来调用并测试该组件的方法功能。具体来说,在解决方案资源管理器里添加对所需COM库的引用后,就可以通过编写相应的代码段来进行实际的功能性检验了。 四、 COM组件的应用价值:除了上述技术细节之外,本段落还讨论了在托管环境中使用COM对象的意义和优势,如它们可以作为独立服务或中间件来实现特定业务逻辑等。这使得开发者能够更好地利用现有的非.NET资源并将其整合进现代化的软件开发流程中去。 五、 元数据生成:文中提到通过将原始的COM类型库转换为元数据格式后,这些新的描述信息就可以被用于进一步构建托管代码环境中的应用程序了。 六、 自定义包装器(Custom Wrappers): 本段落还简单介绍了利用自定义包装技术来实现更灵活和高效的COM组件集成方式。这种方式可以提供额外的功能定制能力,并且简化跨平台的开发过程。 总之,这篇文章详细讲解了C#调用COM组件的方法及其应用价值,为开发者提供了宝贵的参考信息。
  • 使用C++在外进程中创COM服务(ATL)
    优质
    本简介探讨如何利用C++及ATL库,在独立于应用程序之外的外部进程里构建并运行COM(组件对象模型)组件服务。通过这种方式可以有效地实现代码模块化和复用,同时提供跨语言、跨平台的数据交换能力。 ATL用于创建进程外COM组件服务,并包含一个COM客户端测试程序。使用前需要通过批处理文件将COM组件注册到Windows系统(已在win10上验证成功)。详情可参考《ATL创建进程外COM组件服务(C++图解说明)》这篇文章。
  • C++通过COM调用C#实例.rar
    优质
    本资源为一个关于如何使用C++通过COM技术来调用C#编写的组件的实际案例研究,适用于需要进行跨语言编程的技术人员学习参考。 使用VS2015 C#创建COM组件,并用VS2008 C++创建一个简单的工程来调用这个C#生成的COM组件。
  • COM详解
    优质
    《COM组件详解》是一本深入剖析微软COM技术原理与应用的专业书籍,适合软件开发人员阅读。 本段落详细介绍了COM组件的编写与调用方法,包括使用VC6.0、.NET(C#)以及ATL创建COM组件,并展示了如何在VB6.0、VC6.0及.NET(C#/VB)中调用这些组件。同时,文章还对比了COM和DLL之间的区别。通过本段落的学习,读者能够掌握编写和调用COM组件的技能。
  • 注册COM
    优质
    简介:注册COM组件是指在Windows操作系统中将组件对象模型(COM)组件添加到系统注册表的过程,使其他应用程序能够识别和使用该组件的功能和服务。 COM(Component Object Model)是微软提出的一种组件对象模型,它是一种接口标准,允许不同软件组件之间进行交互。在Windows操作系统中,COM组件是以二进制形式存在的可重用的软件模块,通常为.DLL或.EXE文件。通过实现特定接口并提供相应的类ID和接口ID信息,这些组件可以被其他应用程序调用来扩展功能。 注册COM组件是将它们与系统进行关联的过程,以便Windows能够识别并正确地使用它们。以下是主要步骤: 1. **创建COM组件**:开发者利用编程语言(如C++、VB或Delphi)构建一个实现了特定接口的动态链接库(DLL)或可执行文件(EXE)。此过程中定义了类ID和接口ID。 2. **定义接口**:每个COM组件必须提供一组外部可用的服务,这些服务通过一组方法来实现。每种方法由其对应的接口标识符进行识别。 3. **实现IUnknown接口**:所有有效的COM组件都需要支持基本的IUnknown接口,包括QueryInterface、AddRef和Release这三个核心函数。其中,QueryInterface用于获取其他相关接口的信息;而AddRef和Release则负责管理引用计数以确保资源的适当释放。 4. **注册组件**:为了使系统能够找到并使用COM组件,需要在Windows系统的注册表中进行登记操作。此过程涉及将有关信息(包括类ID、接口ID及文件路径等)写入特定键值下,例如`HKEY_CLASSES_ROOT`和`HKEY_LOCAL_MACHINESoftwareClasses`。 5. **利用regsvr32工具**:在Windows系统内最常用的注册COM组件的方法是通过命令行工具regsvr32.exe。此工具可以加载指定的DLL文件,并执行其中定义的DllRegisterServer函数,完成登记工作。例如对于名为“regvtcom.dll”的文件,可以通过输入`regsvr32 regvtcom.dll`来实现其注册。 6. **反向注册组件**:当不再需要某个COM组件时,可以使用同样的工具通过运行命令如`regsvr32 u regvtcom.dll`来进行卸载操作,并从系统中移除对应的条目信息。 7. **自动化登记过程**:有时开发者会在安装程序中嵌入自动化的注册脚本,在此过程中会自动生成并完成COM组件的注册步骤,无需手动干预。 8. **应用实例化与服务调用**:一旦完成了登记操作,这些COM组件可以在各种应用程序环境中使用。例如在VBA宏、ActiveX控件以及各类脚本语言中均可以发现它们的身影。通过其类标识符(CLSID),任何程序都可以定位并启动相应的COM对象,并利用它所提供的功能。 9. **进阶服务**:随着技术的发展,微软推出了更加高级的组件服务如COM+和MTS,为应用程序提供了更强大的事务管理、安全性和并发控制等功能支持。 10. **与.NET环境兼容性**:在引入.NET框架后,微软还开发了针对旧版COM组件的支持机制,使它们能够继续工作于新的编程环境中。同时新创建的.NET组件也能暴露给传统的COM客户端程序使用。 注册COM组件是Windows应用程序设计中的一个重要环节,它涉及到从构建、定义接口到最终安装部署等各个阶段的操作细节。掌握这些知识对于开发人员来说至关重要。
  • COM编程
    优质
    《COM组件编程》是一本深入介绍Windows操作系统下组件对象模型(COM)技术原理与应用的书籍。它不仅涵盖了COM的基础知识和高级主题,还提供了大量实用示例,帮助开发者掌握如何创建、使用和部署可重用软件组件。该书适合有一定编程基础并希望深入了解COM技术的专业人士阅读。 COM组件编程必备资料对于初学者来说是一份很好的参考资料。