Access 2002

Выравнивание структур по границе двойных слов


Когда VBA передает в DLL пользовательскую структуру данных, он увеличивает некоторые ее элементы таким образом, чтобы ни один из них не пересекал границу очередного двойного слова (DWORD, 4 байта). Это значит, что если вы компилируете собственную DLL, вам нужно либо самостоятельно выровнять элементы своих структур, либо воспользоваться опцией компилятора С Struct Member Alignment. Например, если ваша структура объявлена так:

и займет 12 байтов памяти.

Если DLL откомпилирована с опцией Struct Member Alignment, ее структуры данных будут выровнены так, как их передает VBA. Однако лучше всего вам с самого начала организовывать структуры так, чтобы их элементы были выровнены по границе двойных слов.

При работе с Windows API выполняемое VBA неявное выравнивание структур данных не вызывает никаких проблем, поскольку все структуры Windows API выровнены таким же образом. А вот при работе с другими DLL, которые компилировались без опции Struct Member А1 ignment, проблемы вполне возможны. В этом случае вам придется изрядно потрудиться, чтобы передать в DLL нужный набор байтов.

Несмотря на то что Access 2002 — это уже четвертая 32-разрядная версия Access, в эксплуатации остается еще очень много 16-разрядных приложений Access 2. И особенно трудную часть работы по их переводу на 32-разрядные версии Access

составляет замена 16-разрядных вызовов Windows на 32-разрядные. Во многих приложениях Access 2 вызовы Windows использовались только потому, что для решения их задач возможности Access были в то время недостаточными. Поэтому желательно не просто заменить одни вызовы Windows API на другие, но и проанализировать причины, по которым они использовались.

Комментарии закрыты