Как определить 64-битные константы в VB? - PullRequest
2 голосов
/ 28 января 2009

В Visual Basic

Friend Const xxx As UInt64 = 400 * 365 * 24 * 60 * 60 ''// Number of secs in 400 years

Это не с ошибкой

constant expression not representable in type integer

Проблема в том, что 400 * 365 * 24 * 60 * 60 больше, чем 2 ^ 32

Я бы подумал, что, объявив константу UInt64, можно было бы присвоить ей 64-битное значение

Ответы [ 2 ]

7 голосов
/ 28 января 2009

Помимо того, что каждый год существует чуть более 365 дней (вам нужно добавить 97 високосных дней), каждое из значений, которые умножаются для создания вашей константы, являются целочисленными литералами, и, следовательно, до тех пор, пока вы не назначите их UInt64 это все сделано в целочисленном пространстве. Попробуйте это:

Friend Const xxx As UInt64 = 400UL * 365UL * 24UL * 60UL * 60UL
1 голос
/ 28 января 2009

Поместите хеш в конец константы и объявите его как 'double' ...

Я сделал это с моими полями битовой маски:

Public Const EDIT_TRANSACTION              As Double = 1073741824
Public Const EDIT_DWRDELIVERY              As Double = 2147483648#
Public Const ENTER_DWRORDER                As Double = 4294967296#
Public Const DELETE_DWRORDER               As Double = 8589934592#
Public Const DELETE_TRANSACTION            As Double = 17179869184#
Public Const DELETE_WATERORDER             As Double = 34359738368#
Public Const ENTER_METERREADING            As Double = 68719476736#

** РЕДАКТИРОВАТЬ **

Полагаю, меня это понизило, потому что это был старый код, который я написал для VB6, а не совсем то, что вы просили. Так что, если кто-то читает это, использует VB6 и должен передать поля битовой маски во что-то вроде SQL, это то, что отлично сработало для меня.

В противном случае, просто продолжайте голосовать за мой ответ. :)

...