Как я могу поместить VARIANT в COleSafeArray? Я попыталсяконвертировать вариант в COleSafeArray в MFC C++
Variant vara;
COleSafeArray force= vara;
и получил «отладка утверждение не удалось»
Я использовал библиотеку для преобразования значения напряжения Принудительного значения. В библиотеке есть ниже функция:
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 имеет проблему
Какие данные находятся в 'vara'? Конструктор 'COleSafeArray' принимает только тот вариант, который сам обертывает saferyray (в этом случае Safariray копируется). Если вместо этого вы хотите добавить вариант в качестве элемента в новый массив, вам понадобится что-то вроде 'COleSafeArray force; force.CreateOneDim (VT_VARIANT, someSize); длинный индекс = 0; force.PutElement (& index, &vara); ' –
*« Ошибка отладки »* не все, что у вас есть. Диалоговое окно [assertion failed] (https://msdn.microsoft.com/en-us/library/05d5fakw.aspx) также предложил взломать исходный код (нажав * «Retriy» *). Это приведет вас к выражению, которое не может быть оценено как true. Вы также получите весь стек вызовов, ведущий к этой точке. Не обращайте внимания на эту полезную информацию и вместо этого включите в свой вопрос. – IInspectable
Igor Tandetnik Я отредактировал свой вопрос, указав более подробную информацию о моем коде. IInspectable, callstack показал, что «Рамы ниже, возможно, неправильные/ormissing» – abcd