zoukankan      html  css  js  c++  java
  • Window COM 组件可以实现哪些功能?

    ATL 活动模板库 支持创建三种模式的 COM 组件。

    dll,exe,service

    微软公司的官方网站针对这个问题描述如下:
    在64位的windows系统中,一个64位进程不能加载一个32位dll,同理一个32位进程也不能加载一个64位dll。但是,64位windows支持64位和32位进程(包括本机或跨机)间进程间通信(RPC)。在64位windows中,一个进程外32位COM服务器能够与64位客户端进行通信,同样一个进程外64位COM服务器也能与32位客户端进行通信。因此,如果你有一个32位COM无法识别的DLL,你可以将它封装到一个进程外COM服务器中并在一个64位进程中用COM配置调用DLL。
    
    验证:
    工作流程:
    1.创建一个进程外COM服务器(EXE)。
    2.将32位dll的接口函数封装为COM服务器的相关接口。
    3.注册COM服务器*.exe /regserver  (注销 *.exe /unregserver)。
    4.64位进程调用32位COM服务器接口,成功。从而曲线实现了64位进程调用32位dll。
    

    其中 进程外 支持 32bit 和 64.bit 相互调用。
    例如我有一个 64位 动态库,我需要调用里面的函数,但我这个程序必须编译成 32 位程序,很显然 32 位程序是无法调用 64位 程序的,首先地址宽度都不一样,寄存器的大小也不一样。
    那么有没有一种方法可以实现上述问题呢?那就是 进程外 COM 服务,通过 COM 包装 64 位动态库,然后注册该服务,在 32 位程序上寻找该服务,然后进行调用。内部实现是通过 rpc socket 进行调用。

    注意以下命令需要管理员权限运行。

    //[1]
    regsvr32.exe YourDll.dll
    regsvr32.exe /u YourDll.dll

    //[2]
    YourEXE.exe /regserver
    YourEXE.exe /unregserver

    //[3]
    YourEXE.exe /Service
    YourEXE.exe /UnregServer

    代理进程(dllhost.exe)

    转载请注明出处并保持作品的完整性,谢谢
  • 相关阅读:
    使用B或BL跳转时,下一条指令的地址的计算
    【flask-Email】邮件发送
    【MAC】 命令行解压缩 rar 文件
    【flask_sqlalchemy】模糊查询
    【python】集合 list差集|并集|交集
    【pycharm】Mac版快捷键
    【mysql】查询最新的10条记录
    【Python】—— 获取当前运行函数名称和类方法名称
    【Python】—— 获取函数内部变量名称
    【python3】 抓取异常信息try/except
  • 原文地址:https://www.cnblogs.com/cheungxiongwei/p/15448791.html
Copyright © 2011-2022 走看看