C#不注册OCX完成调用


背景

想必桌面程序开放人员对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

将生成如下类似内容:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<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="C:\Users\Administrator\Desktop\Flash.ocx">

修改后:

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

文章作者: Mr.Demon
文章链接: https://www.xpnas.com
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Mr.Demon !
 上一篇
Bitwarden_rs 移动端TLS连接异常 Bitwarden_rs 移动端TLS连接异常
问题Bitwarden_rs部署后出现网页能登陆、移动端无法连接bitwarden服务器的问题,基本上都是由TLS的版本导致的,许多手机默认只使用TLS1.0进行连接,而Nginx、Caddy等默认不开启TLS1.0。 解决Nginx反代修
2020-03-21
本篇 
C#不注册OCX完成调用 C#不注册OCX完成调用
背景想必桌面程序开放人员对OCX并不陌生,尤其是.NET开发人员、COM开发人员。大家是否遇到过这类事情: 系统中不同程序需要使用到OCX的不同版本,如A程序使用V1.OCX,B程序又必须要用V2.OCX 由于某些原因,不能注册OCX
2020-03-21
  目录