• 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)

    转载请注明出处并保持作品的完整性,谢谢
  • 相关阅读:
    [TimLinux] TCP全连接队列满
    [TimLinux] JavaScript 中循环执行和定时执行
    [TimLinux] JavaScript 事件
    [TimLinux] JavaScript 获取设置在CSS类中的属性值
    [TimLinux] JavaScript 面向对象程序设计
    [TimLinux] JavaScript 引用类型——Date
    [TimLinux] django html如何实现固定表头
    [TimLinux] Django 信号
    [TimLinux] Django 中间件
    安卓存储之文件存储方式j
  • 原文地址:https://www.cnblogs.com/cheungxiongwei/p/15448791.html
Copyright © 2020-2023  润新知