C++ Builder调用C# 的com组件
//添加头文件,否则会报错
#include<ComObj.hpp>
// wrapper为光谱仪的包装类 ,所有函数都通过wrapper获取
Variant wrapper;
// ---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 初始化
CoInitialize(NULL);
// 获取com组件中的wrapper类实例
wrapper = CreateOleObject("ChNetDriver.Wrapper");
// 打开光谱仪,在获取wrapper实例之后首先要做这一步
Variant openSpectrometers = wrapper.OleFunction("OpenAllSpectrometers");
Edit1->Text = openSpectrometers.intVal;
// 打开光谱仪,在获取wrapper实例之后首先要做这一步
Variant serialNumber = wrapper.OleFunction<int>("GetSerialNumber",0);
Edit2->Text = serialNumber.bstrVal;
// 获取光谱仪型号名
Variant SpName = wrapper.OleFunction<int>("GetName", 0);
Edit3->Text = SpName.bstrVal;
// 获取光谱仪的波长数组
Variant Wave = wrapper.OleFunction<int>("GetWavelengths", 0);
if (Wave.IsArray())
{
for (int i = 0; i < 2048; i++)
{
ListBox1->Items->Add(Wave.GetElement(i));
}
}
}
// ---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ListBox2->Items->Clear();
// 获取光谱仪的光谱强度
Variant spectrum= wrapper.OleFunction<int>("GetSpectrum", 0);
if (spectrum.IsArray())
{
for (int i = 0; i < 2048; i++)
{
ListBox2->Items->Add(spectrum.GetElement(i));
}
}
}
// ---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
// 设置光谱仪的积分时间,底层库的积分时间单位是微秒
//一般型号的光谱仪的积分时间都是从毫秒开始的,所以要乘以1000
long integrationTime= Edit4->Text.ToInt()*1000;
wrapper.OleFunction<int, long>("SetIntegrationTime", 0, integrationTime);
}
// ---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
//设置光谱仪的平均次数
long ave= Edit5->Text.ToInt();
wrapper.OleFunction<int, long>("SetScansToAverage", 0, ave);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
//设置光谱仪的平滑点数
long bxr= Edit6->Text.ToInt();
wrapper.OleFunction<int, long>("SetBoxcarWidth", 0, bxr);
}
//在结束时释放 COM 接口的引用
//CoUninitialize();
Filed under: 跨语言编程 - @ 2021年5月15日 下午8:49