|
Как определить, в чём работает программа: VBA6 или VBA7?
|
|||
---|---|---|---|
#18+
Начиная с Access 2010 появился VBA7. При чём Access должен их обоих поддерживать (вроде бы и VBA5 из Access 97). У меня возник вопрос. Как определить, какой из версий VBA используется при исполнении программы. При декларации API можно чётко задать версию. Используется слово PtrSafe - значит VBA7, нет - VBA6. А если нет API? ------------------------------------------------------------- А ты вложил уже свой кровный рубль в 50-ти миллиардное состояние Билла Гейтса? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2018, 09:21 |
|
Как определить, в чём работает программа: VBA6 или VBA7?
|
|||
---|---|---|---|
#18+
Какая связь между этим JossКак определить, в чём работает программа: VBA6 или VBA7? и этим JossА если нет API?? А так то я с вас удивляюсь, кто это писал? Access. Переход с 32-х разрядной системы на 64-х разрядную. (Примерное реководство) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2018, 09:43 |
|
Как определить, в чём работает программа: VBA6 или VBA7?
|
|||
---|---|---|---|
#18+
ПанургКакая связь между этим JossКак определить, в чём работает программа: VBA6 или VBA7? и этим JossА если нет API?? А так то я с вас удивляюсь, кто это писал? Access. Переход с 32-х разрядной системы на 64-х разрядную. (Примерное реководство) +1 Тоже удивился. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2018, 09:45 |
|
Как определить, в чём работает программа: VBA6 или VBA7?
|
|||
---|---|---|---|
#18+
Может я неправильно задал вопрос? Не так сформулировал свою мысль? Статья про переход с 32-х разрядной системы на 64-х разрядную. Тут только VBA7. И Начиная с 2010 Access используется VBA7. Но он так же может исполнять программы, написанные в VBA6. И вот мне просто стало интересно. Есть задача, в которой не используется API. И есть Access 2010 (2013, 2016) 32-бита. Он эту задачу будет выполнять в режиме VBA7 или VBA6? Слово PtrSafe чётко указывает на использование VBA7. А если нет такого четкого указания в программе? Программа будет выполняться в режиме VBA7? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2018, 10:10 |
|
Как определить, в чём работает программа: VBA6 или VBA7?
|
|||
---|---|---|---|
#18+
А может и нет никакого различия для 32-х разрядных программ между VBA6 и VBA7 , Но в MSDN прописано следующее ветвление Код: vbnet 1. 2. 3. 4. 5.
Значит это для чего-то нужно? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2018, 10:20 |
|
Как определить, в чём работает программа: VBA6 или VBA7?
|
|||
---|---|---|---|
#18+
Joss...в которой не используется API... Программа будет выполняться в режиме VBA7?Причём тут API? Среда не зависит от наличия или отсутствия API. Кроме PtrSafe там ещё есть различия, всех не помню, но появляются, например, новые типы - LongLong . И тут не прокатит, как многие обычно делают, приведение типов по умолчанию. Так что используй условную компиляцию. Кстати её можно использовать не только в разделе декларации модуля, но и в других частях - объявление процедуры/функции, области декларации внутри исполняемого кода и просто в коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2018, 10:34 |
|
Как определить, в чём работает программа: VBA6 или VBA7?
|
|||
---|---|---|---|
#18+
Вот нашел интересную информацию в MSDN. Может кого-то заинтересует. В предыдущих версиях VBA не было определенного типа данных указателя, поэтому использовался тип Long. Так как тип данных Long всегда 32-разрядный, при использовании в системе с 64-разрядной памятью старшие 32 разряда могут усекаться, или запись может происходить в другие адреса памяти. Обе этих ситуации могут привести к непредвиденному поведению или сбою системы. Чтобы устранить эту проблему, в VBA теперь есть настоящий тип данных указателя: LongPtr. Этот новый тип данных позволяет записывать оператор Declare правильно: VBA Код: vbnet 1. 2.
Этот тип данных и новый атрибут PtrSafe позволяют использовать оператор Declare в 32- и 64-разрядных системах. Атрибут PtrSafe показывает компилятору VBA, что оператор Declare предназначен для 64-разрядной версии Office 2010. Без этого атрибута при использовании оператора Declare в 64-разрядной системе возникнет ошибка компиляции. Обратите внимание, что атрибут PtrSafe в 32-разрядной версии Office 2010 необязателен. Это позволяет существующим операторам Declare работать как обычно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2018, 10:37 |
|
Как определить, в чём работает программа: VBA6 или VBA7?
|
|||
---|---|---|---|
#18+
JossА может и нет никакого различия для 32-х разрядных программ между VBA6 и VBA7Насколько мне помнится практически нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2018, 10:38 |
|
Как определить, в чём работает программа: VBA6 или VBA7?
|
|||
---|---|---|---|
#18+
Joss, да не парься ты по этому поводу. ЕМНИП, всё одно код скомпилированный в одной разрядности не будет работать в другой без перекомпилирования. Могу ошибаться... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2018, 10:43 |
|
Как определить, в чём работает программа: VBA6 или VBA7?
|
|||
---|---|---|---|
#18+
ПанургJoss...в которой не используется API... Программа будет выполняться в режиме VBA7?Причём тут API? Среда не зависит от наличия или отсутствия API. Кроме PtrSafe там ещё есть различия, всех не помню, но появляются, например, новые типы - LongLong . И тут не прокатит, как многие обычно делают, приведение типов по умолчанию. Так что используй условную компиляцию. Кстати её можно использовать не только в разделе декларации модуля, но и в других частях - объявление процедуры/функции, области декларации внутри исполняемого кода и просто в коде. Понедельник - день тяжелый. Неправильно заданный вопрос, неудачно сформулированная мысль. Ну тип LongLong - это только для 64-х разрядных систем. А вот новый тип LongPtr который может менять свой размер в зависимости от разрядности компилятора. Это только VBA7. Используется для указателей. Обеспечивает совместимость между 32-х и 64-х разрядными версиями. И вот его как раз и надо прописывать в операторах условной компиляции если хочешь, чтоб твоя программа работала так же и на Access 2003, 2007. Я у себя всегда прописываю описание и для WIN64 / WIN32 и для VBA7 / VBA6. Так что программы работают на всём, что есть. Можно конечно прописать всего 2 варианта, а не 3 (как у меня): WIN64 + VBA7 и VBA6 To Панург Вот и различие для 32-х разрядных программ между VBA6 и VBA7. Использование нового типа данных -: LongPtr ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2018, 11:01 |
|
Как определить, в чём работает программа: VBA6 или VBA7?
|
|||
---|---|---|---|
#18+
Подобью итог. В Access 2010 и выше программа всегда выполняется в среде VBA7 (что правильно). Просто принятые умолчания для 32-х разрядной версии совпадают с требованиями VBA6. 1. Атрибут PtrSafe в 32-разрядной версии Office 2010 (и выше) необязателен 2. Тип LongPtr в 32-разрядной версии Office 2010 (и выше) может быть заменён на тип Long ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2018, 11:14 |
|
Как определить, в чём работает программа: VBA6 или VBA7?
|
|||
---|---|---|---|
#18+
JossПонедельник - день тяжелый.Кому как... Я не очень понимаю чего ты хочешь? Я тебе про это (для перфекционистов) для примера Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2018, 11:24 |
|
Как определить, в чём работает программа: VBA6 или VBA7?
|
|||
---|---|---|---|
#18+
ПанургJoss, да не парься ты по этому поводу. ЕМНИП, всё одно код скомпилированный в одной разрядности не будет работать в другой без перекомпилирования. Могу ошибаться... Меня это заинтересовало чисто теоретически. Ну и для лучшего понимания внутренней кухни. Кстати. Если только у тебя базы не формата MDE или ACCDE, то перекомпиляция на другую разрядность происходит автоматически, при запуске программы на выполнение. (по крайней мере так было у меня) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2018, 11:47 |
|
Как определить, в чём работает программа: VBA6 или VBA7?
|
|||
---|---|---|---|
#18+
ПанургЯ не очень понимаю чего ты хочешь? Ну я в выводах всё уже написал. Понял, что в Access 2010 и выше компиляция всегда идёт в среде VBA7. А использовать программы на VBA6 без переделок в Access 2010 и выше можно потому, что синтаксис 32-х разрядной версии VBA7 и VBA6 совпадают. Всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2018, 11:55 |
|
Как определить, в чём работает программа: VBA6 или VBA7?
|
|||
---|---|---|---|
#18+
JossПанургJoss, да не парься ты по этому поводу. ЕМНИП, всё одно код скомпилированный в одной разрядности не будет работать в другой без перекомпилирования. Могу ошибаться... Меня это заинтересовало чисто теоретически. Ну и для лучшего понимания внутренней кухни. Кстати. Если только у тебя базы не формата MDE или ACCDE, то перекомпиляция на другую разрядность происходит автоматически, при запуске программы на выполнение. (по крайней мере так было у меня)С 64битным офисом не имел дела, упражнялся на других 64битных приложениях с VBA. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2018, 11:57 |
|
Как определить, в чём работает программа: VBA6 или VBA7?
|
|||
---|---|---|---|
#18+
ПанургJoss, да не парься ты по этому поводу. ЕМНИП, всё одно код скомпилированный в одной разрядности не будет работать в другой без перекомпилирования. Могу ошибаться... У меня такая ситуация сейчас. aacde Правда параллельно. Т.е. Помимо ошибки, что это приложение вин32 еще на вин7/64 + MS 2016 отказалась работать GetOpenFiles, правда на конкретном компе. Просто завершается пустой строкой и все, даже окно не открывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2018, 13:20 |
|
Как определить, в чём работает программа: VBA6 или VBA7?
|
|||
---|---|---|---|
#18+
Если только на одном компе, значит там нет нужной библиотеки. Кажется comdlg32.dll. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2018, 13:57 |
|
|
start [/forum/topic.php?fid=45&fpage=50&tid=1611412]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 17ms |
total: | 159ms |
0 / 0 |