Ошибка с типами :-(
mike; 21.10.04

void ValueChanged(char* lpszPictureName, char* lpszObjectName , VARIANT * Value, VARIANT * PreviousValue, BOOL OutOfRange)

{
char t[20];
float f;
Value->vt = VT_R4;
f = Value->fltVal; //ТУТ ОШИБКА
sprintf(t,"%s",f);
MessageBox(NULL,t,"",MB_OK);
}

Как мне поиметь значение float из variant???
Re: Ошибка с типами :-(
Alexis; 21.10.04

а может VT_R8 и dblVal?

Re: Ошибка с типами :-(
mike; 21.10.04

RE: Alexis

тоже самое:
error 004a: unknown struct/union members
Re: Ошибка с типами :-(
Alexis; 21.10.04

то есть что такое VARIANT она знает, а то что в варианте есть поля FLOAT fltVal и DOUBLE dblVal она не в курсе?

а ты в чем компилишь?
Re: Ошибка с типами :-(
Alexis; 21.10.04

кстати, в хелпаке wincc есть такая штука:

When accessing the value of the VARIANT, a ".u." must be inserted between the name of the VARIANT and the name of the member.

Example:
// Supply Variant
myVariant.vt = VT_I4;
myVariant.u.lVal = 233;

A description of the data type VARIANT can be found in the appropriate technical literature. The VARIANT dmValue needs to be initialized with VariantInit() before the first use and be released again with VariantClear(&dmValue) after use.

Re: Ошибка с типами :-(
Александр Родин, ООО "Нева Электрик"; 21.10.04

-> sprintf(t,"%s",f);

кажися должна быть не %s, а %f или %d, потому как f у вас типа float.
я так думаю, что из-за этого у вас и лезет ошибка.
Re: Ошибка с типами :-(
mike; 22.10.04

re: Александр Родин: это я знаю. но это не актуально.


re: Alexis: в WinCC 6.0

пробовал и float и double и т.п.
дело в том что первая трочка (где тип указывается) нормально, а вот когда к значию обащаешся - error

может WinCC криво стоит... ХЗ карчое :-(
Re: Ошибка с типами :-(
Alexis; 22.10.04

Что-то ты где-то темнишь...

Вот, попробовал такой скриптик, компилится и работает нормально:

void vtFunction(float fltValue)
{
VARIANT vt;
VARIANT *pvt = &vt;
vt.vt = VT_R4;
vt.u.fltVal = fltValue;
printf("%f\r\n", vt.u.fltVal );
pvt->u.fltVal += fltValue;
printf("%f\r\n", pvt->u.fltVal );
(*pvt).u.fltVal += fltValue;
printf("%f\r\n", (*pvt).u.fltVal );
}
Re: Ошибка с типами :-(
mike; 22.10.04

#include "apdefap.h"

void ValueChanged(char* lpszPictureName, char* lpszObjectName , VARIANT * Value, VARIANT * PreviousValue, BOOL OutOfRange)
{
Value->vt = VT_R4;
Value->fltVal = 12.7;
}

Тоже самое... ошибка на строчке Value->fltVal = 12.7;
Наверное WinCC стоит криво :-/
Re: Ошибка с типами :-(
Alexis; 22.10.04

mike, ты бы мой пример то посмотрел повнимательнее... :))


напиши так:
Value->u.fltVal=12.7;

или так:
(*Value).u.fltVal=12.7;

Re: Ошибка с типами :-(
mike; 22.10.04

Вау! заработало :-)

спасибо!!!

а где можно посматреть про структуру VARIANT и как ей пользоваться?
Re: Ошибка с типами :-(
mike; 22.10.04

Просто в обычном С++ пишется же просто

Value->vt = VT_R4;
Value->fltVal = 12.7;
а не
Value->vt = VT_R4;
Value->u.fltVal = 12.7;

Re: Ошибка с типами :-(
Alexis; 22.10.04

Дык это ж в обычном с/с++ :))


А описание VARIANT и функций работы с ним смотри в MSDN или в каком-нибудь "учебнике" по виндозе.<<br>