2014-11-07 3 views
1

Это может быть довольно простой вопрос, но я искал и не могу найти объяснения. Я играю с функциями API для диалоговых окон в VBA, и я хочу, чтобы объявить константы для стилей окна, как определено здесь, так что я могу попробовать использовать функцию CreateDialog API: http://msdn.microsoft.com/en-us/library/windows/desktop/ms632600(v=vs.85).aspxОпределение констант стиля окна в VBA (0x00000000 vs & H000)

Обычно я вижу окно константы в VBA определенные как длинные типы со значением примерно &H000 или что-то в этом роде. Но я не могу найти значение формата &H000 для этих констант, я могу найти только значения формата 0x00000000.

Например, посмотрите документацию OpenFileName here и прокрутите вниз до флагов. Константные выражения перечислены со значениями в формате 0x00000000. Однако, если мы посмотрим на константы CommonDialog here, мы можем увидеть те же константы, что и их значения в формате &H000.

Итак, у меня есть как минимум три вопроса:
Что представляют значения 0x0000000?
Что представляют значения & H000?
Это их способ конвертировать между ними?

Потому что я попытался объявить Public Const WS_BORDER as Long=0x00800000L, и получим область синтаксиса после «х», говорящего о ожидаемом конце инструкции.

+0

Это звучит достаточно просто. Тем не менее, «L» в конце выражения все еще дает синтаксическую ошибку. Например. Я изменил 'Long = 0x00800000L' на' Long = & H00800000L', и он дает мне синтаксическую ошибку на «L», говорящую ожидаемый конец оператора – CBRF23

+1

Суффикс 'L' также является идиомой C, просто отбросьте его в VBA:' Public Const WS_BORDER as Long = H & 00800000' –

+0

Интересно. Мне нужно будет кое-что прочитать. Я нашел [это] (http://support2.microsoft.com/kb/161304?ln=end) перед отправкой и попытался преобразовать суффикс L в &, однако он делает то же самое, что просто отбрасывает L. и Мне интересно, что VB автоматически преобразует 'H & 00800000' или' H & 00800000 & 'в' & H800000' – CBRF23

ответ

1

0x...L формат объясняется here для C++ (я считаю, что это то же самое на нескольких других языках). Значение 0x означает, что число является шестнадцатеричным, а L означает, что он должен интерпретироваться компилятором как Long.

Эквивалентный синтаксис VBA будет &H...& Где &H означает шестнадцатеричную и & означает Long.

Так, например, ваше заявление:

Public Const WS_BORDER as Long = 0x00800000L 

Должно быть:

Public Const WS_BORDER as Long = &H00800000& 
+0

Я попробовал формат '& H .... &', но VBA автоматически просто сокращает его, как только я уезжаю с этой линии, что, по моему мнению, было интересным. – CBRF23

+1

VBA избавится от ведущих нулей, но это нормально: все равно будет такое же число. – Blackhawk

Смежные вопросы