Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Variant (const unsigned __int64)


Автор: np9mi7 10.10.2005, 10:39
Добрый день.

Есть код:
Код

const unsigned __int64 ullValue = __int64 ();
Variant vValue (ullValue);


При попытке скомпилировать:
Цитата

Ambiguity between '_fastcall System::Variant::Variant(const char)' and '_fastcall System::Variant::Variant(const signed char)'


При просмотре исходников VCL не нашел конструктора от unsigned __int64.

Как с этим бороться? Как передать хранимой процедуре unsigned __int64?

Заранее благодарен за ответы.

Автор: _hunter 10.10.2005, 11:23
так и передавай ( как компилятор предлагает ):
Variant vValue ((char*)ullValue);

Автор: np9mi7 10.10.2005, 11:59
Цитата
так и передавай ( как компилятор предлагает ):
Variant vValue ((char*)ullValue);
, прикольно, ну и в итоге ему передается 4 - ре байта, а мне нужно восемь.....

Автор: szz 10.10.2005, 12:29
А ты в Variant никогда не сохранишь 64-битные целые - забудь об этом. В Variant для int используется системной ширины целое, которое как правило 32 бита.
Напиши сам свой Variant - это не должно быть сложно.

Автор: _hunter 10.10.2005, 12:38
Цитата
у и в итоге ему передается 4 - ре байта

логично -- если нули встречаются...
тогда смотрим на конструкторы для массивов:
Variant(const int* bounds, const int boundsSize, Word varType);

соответственно:
Variant MyVariant(OPENARRAY(int, (0, 8)), varInteger);
for ( int i = 0; i < 9; i++ )
MyVariant.PutElement(((char*)&number)[i], i);
( возможно нужно будет развернуть массив )

Автор: np9mi7 10.10.2005, 21:41
_hunter, в итоге байтами и обошелся....

Автор: np9mi7 24.1.2006, 16:14
Код

Variant vTableValue;

/// ...
/// получение значения из базы
/// ...

TVariant vValue (vTableValue);
unsigned long long ullValue = vValue.ullVal;


И никаких байт не нужно;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)