VB调用C#的DLL(COM组件)
需要的程序
- [x] 不低于编写C#库的netframework,本例中是netframework4.6.2
- [x] 光谱仪驱动,正常安装即可
- [x] 库文件,本例中的ChNetDriver.dll,CyUsb.dll
- [x] 注册com组件的工具,RegAsm.exe和gacutil.exe
配置步骤流程
安装netframework
安装netframework4.6.2文件夹下的ndp46-targetingpack-kb3045566.exe,也可以从微软官网自行下载,版本号要不低于4.6
安装光谱仪驱动
根据正常流程安装光谱仪驱动,右键我的电脑,从设备管理器中找到对应的光谱仪名称,右键点击更新驱动,然后指向光谱仪驱动文件夹的对应平台版本驱动即可
库文件复制
将库文件的文件夹中ChNetDriver.dll和CyUSB.dll复制到VB的工程文件夹下即可
注册COM组件
- 将注册com组件工具文件夹下的gacutil.exe和RegAsm.exe复制到VB的工程文件夹下
- 以管理员身份运行打开命令提示符
- 在命令提示符窗口中转到VB工程文件夹下(注册COM组件工具已经复制到该目录下)
- 输入命令regasm ChNetDriver.dll /tlb: ChNetDriver.tlb /codebase
- 命令提示符窗口提示注册成功则说明注册成功,并且会生成一个ChNetDriver.tlb的文件
- 在命令提示符窗口输入命令gacutil /i ChNetDriver.dll
编写VB程序
添加引用
在VB程序中添加引用,选中ChNetDriver,然后即可正常调用ChNetDriver库中的函数
## 常用函数说明
1. 实例化一个Wrapper类的变量a,所有函数都通过a调用
Dim a As New ChNetDriver.Wrapper
- 第二步打开光谱仪设备接口
a.OpenAllSpectrometers
- 以上两步的顺序不可变动,以下顺序可以随意调换。获取光谱仪的像素点数,参数为光谱仪索引,从0开始
'像素点数也代表了波长数组和光谱数组的长度
Dim numberOfPixels As Integer
'参数0代表第一台光谱仪
numberOfPixels = a.GetNumberOfPixels(0)
- 获取光谱仪的序列号,索引为光谱仪的台数索引
'参数0代表第一台光谱仪
a.GetSerialNumber(0)
- 获取光谱仪的波长数组,长度为步骤3中获取的数据
wavelengths = a.GetWavelengths(0)
For i = 0 To 2047
List1.AddItem wavelengths(i)
Next
- 获取光谱仪采集的光谱数据,长度为步骤3中获取的数据
spectrums = a.GetSpectrum(0)
For i = 0 To 2047
List2.AddItem spectrums(i)
Next
- 设置光谱仪的积分时间,积分时间即为光谱仪的曝光时间,积分时间越长,采集的光谱强度值越大,需要返回的数据的时间越长,积分时间以微秒为单位,为整数类型(不同型号的光谱仪的最短积分时间不同)
'若光谱仪的最短积分时间为毫秒,应将积分时间变为毫秒
intTime = CLng(Text4.Text) * 1000
Call a.SetIntegrationTime(0, intTime)
- 设置光谱仪的平均次数,光谱仪会采集3次光谱,然后将3次的光谱数据求平均之后返回
'平均次数乘以积分时间是采集一次光谱的时间
'例如平均次数是3次,积分时间是1秒,则采集一次光谱的时间为3秒
ave = CInt(Text5.Text)
Call a.SetScansToAverage(0, ave)
- 设置平滑平均
bxr = CInt(Text6.Text)
Call a.SetBoxcarWidth(0, bxr)
联系方式
使用过程中有任何问题可以发邮件联系zmlin@choptics.com