VS自动执行批处理将ocx文件导出为C#动态库

 

一、C#程序使用C++开发的ocx组件(假设名称为Chart.ocx),使用时需要工具Aximp.exe将ocx组件导出C#能直接使用的动态库:

1、AxChart.dll

2、ChartLib.dll

 

二、由于这个生成过程稳定,因此考虑使用批处理自动化执行,具体思路是:

1、在C++项目:Chart中增加批处理自动生成脚本:ExportChartDll.bat

2、配置Chart项目设置,在生成后事件命令行中执行该脚本

 

三、下面实现这个想法:

1、创建一个批处理文件:ExportChartDll.bat,放到Chart项目根目录下

2、编写批处理脚本

(1)定位到项目生成目录

 

1 set CurrentDir=%~dp0
2 echo %CurrentDir%

 

(2)定位到Chart.ocx文件

当生成Debug或Release模式不同时目录是不同的,因此要求能灵活根据编译设置动态匹配Chart.ocx的路径
VS提供了获取当前编译目录的宏定义,可以定位到Debug或Release的完整目录:cd $(TargetDir)
 
完整的ExportChartDll.bat内容如下:
 
 1 set CurrentDir=%~dp0
 2 echo %CurrentDir%
 3  
 4 REM 拼接Chart.ocx路径
 5 set ChartOcxPath=%CurrentDir%\Chart.ocx
 6 echo %ChartOcxPath%
 7   
 8 REM 拼接AxImp.exe程序绝对路径,为方便调用,将AxImp.exe添加到Chart项目的根目录下,生成路径与Chart.ocx相同
 9 set AxImpExePath=%CurrentDir%\AxImp.exe
10 echo %AxImpExePath%
11   
12 REM 调用AxImp.exe程序执行导出C#动态库
13 call %AxImpExePath% %ChartOcxPath%
 
3、VS中配置项目“生成后事件命令行”
(1)右键Chart项目,选择“属性”,选择“生成事件”
(2)找到“生成后事件命令行”,编写如下命令:
 
1 cd $(TargetDir)
2 ExportChartDll.bat

 

说明:    
(1)cd $(TargetDir):用来定位ExportChartDll.bat 所在目录
(2)ExportChartDll.bat:执行批处理ExportChartDll.bat
 
4、测试验证
Debug或Release模式编译项目Chart,在bin\Debug或bin\Release目录中生成三个文件:
(1)Chart.ocx

(2)AxChart.dll

(3)ChartLib.dll

生成这三个文件与期望一致,说明自动导出脚本得到正确执行。

 

附:Aximp.exe

 

posted @ 2021-01-23 23:48  T-Evan  阅读(210)  评论(0)    收藏  举报