COM组件生成导出dll

255 阅读2分钟
  1. ActiveX 控件

你可以使用Visual Studio自带的工具AxImp.exe将.ocx文件转化为.dll文件。 以下是步骤:

  1. 打开Visual Studio命令提示符(管理员权限)
  2. 进入.ocx文件所在的目录
  3. 运行以下命令: AxImp.exe /source <ocx文件名> /out:<dll文件名> 例子:AxImp.exe /source Test.ocx /out:Test.dll
  4. 转化完成后,将生成的.dll文件引入到你的C#项目中即可。 希望对你有帮助!

针对.ocx

AxImp.exe /source Test.ocx /out:Test.dll

针对.dll

AxImp.exe /source Test.dll /out:NewTest.dll

image.png

  1. com 组件
tlbimp Test.dll /out:NewTest.dll

参考:

c# 调用com组件 - db's jim - 博客园 (cnblogs.com)

指定.NET Framework 版本:

查看默认tlbimp.exe的工具,默认生成为 .net framework 4.0

where tlbimp

image.png

本机 tlbimp 有:

  • v10.0:导出.net framework 4.0
  • v7.0: 导出.net framework 2.0

image.png

导出生成 .net framework 2.0 版本

  • 直接定位文件v7.0 tlbimp.exe 文件夹,示例
  • dll直接导出在 v7.0 文件夹内
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\x64>tlbimp "C:\*.dll" /out:*.dll

导出结果: .net framework 2.0

image.png

  1. com 查看器

oleview.exe

image.png

OLE/COM 对象查看器 - Win32 apps | Microsoft Learn

  1. com 的 CLISD

windows 注册表中 regedit,调用哪个方法,则使用对应的 CLISD

image.png

image.png

  1. com 的注册与注销

image.png

注册com

regsvr32 *.dll   # 支持相对路径
regsvr32 X:\\XXCOM.dll   # X:跟dll的绝对路径

卸载com

regsvr32 /u *.dll  # 支持相对路径
regsvr32 /u X:\\XXCOM.dll   # X:跟dll的绝对路径
  1. com 注册表可视化查看器

tyranid/oleviewdotnet: A .net OLE/COM viewer and inspector to merge functionality of OleView and Test Container (github.com)

image.png

  1. 纯c调用COM

用C语言调用COM组件 | Demon's Blog

Articles by Jeff Glatt (Articles: 12) - CodeProject

image.png

  1. c#

方式1:

直接引入com导出的dll,按正常c#程序处理,类实例化对应对象即可,无需关心com对应的clsids

方式2: 依据clsids,创建对象,并按已知对象类型,进行强转

 machine = (JHMachineInProcess)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("BEB4B3C8-CCD6-4F37-97E6-21DD51BD2F23")));

方式3:一句clsids对应的服务名称 存在问题

image.png

   CNC8070_VariablesClass comObject = (CNC8070_VariablesClass)Activator.CreateInstance(Type.GetTypeFromProgID("cnc8070.variables"));

C# .NET 和 COM - 咸鱼翻身? - 博客园 (cnblogs.com)

com 学习

资料

COM 互操作示例:.NET 客户端和 COM 服务器 - .NET Framework | Microsoft Learn

组件对象模型 (COM) - Win32 apps | Microsoft Learn

在 Windows 应用中使用 COM - Win32 apps | Microsoft Learn

COM win32 api

组件对象模型 (COM) - Win32 apps | Microsoft Learn

c++ 示例

  1. vs 服务端,及调用示例

一个完整的COM 示例Demo(C++语言描述)_c++编写的opc da demo-CSDN博客

  1. mingw 客户端

用MinGW的gcc编译com组件_mingw com开发-CSDN博客

microsoft/component-object-model-sample: Sample code for Component Object Model (COM) setup and registration. (github.com)