背景

想必桌面程序开放人员对OCX并不陌生,尤其是.NET开发人员、COM开发人员。大家是否遇到过这类事情:

  • 系统中不同程序需要使用到OCX的不同版本,如A程序使用V1.OCX,B程序又必须要用V2.OCX
  • 由于某些原因,不能注册OCX

不注册OCX完成调用

2.1 Aximp 生成代理dll

Aximp.exe程序会自动随 Visual Studio 一起安装。 若要运行此工具,请使用 Visual Studio 开发人员命令提示(或 Windows 7 中的 Visual Studio 命令提示)。

aximp file.ocx

效果如下:

**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.14
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
C:\Windows\System32\aximp C:\Users\Administrator\Desktop\Flash.ocx
生成的程序集: C:\Windows\System32\ShockwaveFlashObjects.dll
生成的程序集: C:\Windows\System32\AxShockwaveFlashObjects.dll

2.2 mt 生成清单文件

mt.exe程序同样自动随 Visual Studio 一起安装。

C:\Windows\System32\mt -tlb:C:\Users\Administrator\Desktop\Flash.ocx -dll:C:\Users\Administrator\Desktop\Flash.ocx -out:C:\Users\Administrator\Desktop\Flash.manifest

将生成如下类似内容:


<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<file name="C:\Users\Administrator\Desktop\Flash.ocx" hashalg="SHA1">
<comClass clsid="{D27CDB6E-AE6D-11CF-96B8-444553540000}" tlbid="{D27CDB6B-AE6D-11CF-96B8-444553540000}" description="Shockwave Flash">comClass>
assembly>

2.3 加载调用

  • .NET项目引用Aximp生成的两个dll,可以直接使用其包含类型定义。
  • .NET项目右键-添加项-应用程序清单文件,将生成app.manifest文件。
  • 复制mt生成的清单内容节点到结尾的内容替换app.manifest文件末尾的
  • 将OCX文件及相关引用一起放到程序相对目录下,并将file属性修改为相对路径。

修改前:

<file name=<file name="C:\Users\Administrator\Desktop\Flash.ocx">

修改后:

<file name=<file name=".\Flash.ocx">

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

Bitwarden_rs 移动端TLS连接异常 上一篇