在 MFC c++ 中将变体转换为 COleSafeArray
convert variant into COleSafeArray in MFC c++
如何将 VARIANT 放入 COleSafeArray?
我试过了
Variant vara;
COleSafeArray force= vara;
得到了"debug assertion failed"
我使用一个库将电压值转换为力值。
在库中,有以下功能:
VARIANT _Calibration::ConvertToFT(VARIANT* Voltages, LPCTSTR ForceUnits, LPCTSTR TorqueUnits)
{
VARIANT result;
static BYTE parms[] =
VTS_PVARIANT VTS_BSTR VTS_BSTR;
InvokeHelper(0x60030040, DISPATCH_METHOD, VT_VARIANT, (void*)&result, parms,
Voltages, ForceUnits, TorqueUnits);
return result;
}
所以在我的主程序中:
COleSafeArray voltagesk;
double voltages[6];
_read-voltage(voltages);
long y;
for (y = 0; y<6; y++) {
// COleSafeArrays use pass-by-reference methods to read or write
voltagesk.PutElement(&y, &(voltages[y]));
}
COleSafeArray forces = GetActiveCalibration().ConvertToFT(voltagesk, L"lb", L"in-lb");
for (y = 0; y<6; y++) {
// COleSafeArrays use pass-by-reference methods to read or write
forces.GetElement(&y, &(voltages[y]));
我尝试删除此行COleSafeArray forces = GetActiveCalibration().ConvertToFT(voltagesk, L"lb", L"in-lb");
”,我的程序 运行 很好,但无法将电压转换为力,因此我认为从 VARIANT 转换为 COleSafeArray 有问题
感谢您的意见。
实际上,此代码的目的是将电压转换为测量值。 voltagesk 不为空,因为 _read-voltage(voltages) 将值放入电压中。
"GetActiveCalibration().ConvertToFT" 从校准文件中读取校准信息并将电压转换为所需值(遵循校准文件的规则)
我更改了以下代码:
long y;
Double tempc[6];
_read (voltages);
for (y = 0; y<7; y++) {
voltagesk.PutElement(&y, &(voltages[y]));
}
VARIANT vara= GetActiveCalibration().ConvertToFT(voltagesk, L"N", L"N-m");
//returned value type of convertToFT is VARIANT
COleSafeArray forces;
forces.Create(VT_R8, 1, numElements);
for (y = 0; y<6; y++)
{
forces.PutElement(&y, &vara);
}
for (y = 0; y<6; y++) {
forces.GetElement(&y, &tempc[y]); // tempc is the converted value
}
我的程序运行很好,但是转换后的值很低(2.3333E-1233)。我认为 type"VT_R8" 在 QT 中有问题。
我改变了方法。而不是使用代码读取校准文件,我自己阅读并理解它。在那之后,我 re-wrote 我的程序很好,只是为了转换目的而没有 COleSafeArray
如何将 VARIANT 放入 COleSafeArray? 我试过了
Variant vara;
COleSafeArray force= vara;
得到了"debug assertion failed"
我使用一个库将电压值转换为力值。 在库中,有以下功能:
VARIANT _Calibration::ConvertToFT(VARIANT* Voltages, LPCTSTR ForceUnits, LPCTSTR TorqueUnits)
{
VARIANT result;
static BYTE parms[] =
VTS_PVARIANT VTS_BSTR VTS_BSTR;
InvokeHelper(0x60030040, DISPATCH_METHOD, VT_VARIANT, (void*)&result, parms,
Voltages, ForceUnits, TorqueUnits);
return result;
}
所以在我的主程序中:
COleSafeArray voltagesk;
double voltages[6];
_read-voltage(voltages);
long y;
for (y = 0; y<6; y++) {
// COleSafeArrays use pass-by-reference methods to read or write
voltagesk.PutElement(&y, &(voltages[y]));
}
COleSafeArray forces = GetActiveCalibration().ConvertToFT(voltagesk, L"lb", L"in-lb");
for (y = 0; y<6; y++) {
// COleSafeArrays use pass-by-reference methods to read or write
forces.GetElement(&y, &(voltages[y]));
我尝试删除此行COleSafeArray forces = GetActiveCalibration().ConvertToFT(voltagesk, L"lb", L"in-lb");
”,我的程序 运行 很好,但无法将电压转换为力,因此我认为从 VARIANT 转换为 COleSafeArray 有问题
感谢您的意见。 实际上,此代码的目的是将电压转换为测量值。 voltagesk 不为空,因为 _read-voltage(voltages) 将值放入电压中。 "GetActiveCalibration().ConvertToFT" 从校准文件中读取校准信息并将电压转换为所需值(遵循校准文件的规则) 我更改了以下代码:
long y;
Double tempc[6];
_read (voltages);
for (y = 0; y<7; y++) {
voltagesk.PutElement(&y, &(voltages[y]));
}
VARIANT vara= GetActiveCalibration().ConvertToFT(voltagesk, L"N", L"N-m");
//returned value type of convertToFT is VARIANT
COleSafeArray forces;
forces.Create(VT_R8, 1, numElements);
for (y = 0; y<6; y++)
{
forces.PutElement(&y, &vara);
}
for (y = 0; y<6; y++) {
forces.GetElement(&y, &tempc[y]); // tempc is the converted value
}
我的程序运行很好,但是转换后的值很低(2.3333E-1233)。我认为 type"VT_R8" 在 QT 中有问题。 我改变了方法。而不是使用代码读取校准文件,我自己阅读并理解它。在那之后,我 re-wrote 我的程序很好,只是为了转换目的而没有 COleSafeArray