在 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