C#不注册OCX完成调用
一、背景
想必桌面程序开放人员对OCX并不陌生,尤其是.NET开发人员、COM开发人员。大家是否遇到过这类事情:
- 系统中不同程序需要使用到OCX的不同版本,如A程序使用V1.OCX,B程序又必须要用V2.OCX
- 由于某些原因,不能注册OCX
二、不注册OCX完成调用
2.1 Aximp 生成代理dll
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
C:\Windows\System32>
此工具会自动随 Visual Studio 一起安装。 若要运行此工具,请使用 Visual Studio 开发人员命令提示(或 Windows 7 中的 Visual Studio 命令提示)。
2.2 mt 生成清单文件
C:\Windows\System32>mt -tlb:"C:\Users\Administrator\Desktop\Flash.ocx" -dll:"-tlb:"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="-tlb: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><comClass clsid="{D27CDB71-AE6D-11CF-96B8-444553540000}" tlbid="{D27CDB6B-AE6D-11CF-96B8-444553540000}" description="IFlashObjectInterface Interface"></comClass><comClass clsid="{E0920E11-6B65-4D5D-9C58-B1FC5C07DC43}" tlbid="{D27CDB6B-AE6D-11CF-96B8-444553540000}" description="FlashObject Class"></comClass><typelib tlbid="{57A0E746-3863-4D20-A811-950C84F1DB9B}" resourceid="2" version="1.1" helpdir="" flags="HASDISKIMAGE"></typelib></file><comInterfaceExternalProxyStub name="IShockwaveFlash" iid="{D27CDB6C-AE6D-11CF-96B8-444553540000}" tlbid="{57A0E746-3863-4D20-A811-950C84F1DB9B}" proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"></comInterfaceExternalProxyStub></assembly>
此工具同样自动随 Visual Studio 一起安装。
2.3 加载调用
- .NET项目引用
Aximp
生成的两个dll,可以直接使用其包含类型定义。 - .NET项目右键-添加项-
应用程序清单文件
,将生成app.manifest
文件。 - 复制mt生成的清单内容
<file>
节点到</assembly>
结尾的内容替换app.manifest
文件末尾的</assembly>
。 - 将OCX文件及相关引用一起放到程序相对目录下,并将
<file>
节点下的name
属性修改为相对路径。
打赏: 微信
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。