Асм? Если модуль один, то просто в секции данных (.data). Если несколько, то объявляешь в одном, делаешь их паблик, а других модулях объявляешь через extern (в масме есть ещё externdef): Код (Text): mod1.asm .data public var1 var1 dd 12 mod2.asm extern var1:DWORD .data var2 db ? ... Читай документацию масма.
А как бы минимизировать их использование? Вот конкретный пример: Содержимое hOldClipViewer теряется при входе/выходе в процедуру. Приходится выносить её в глобальные uninitialized .data? А не хочется... ;o) Код (Text): MainDlgProc proc hWnd:HWND, Msg:UINT, wParam:WPARAM, lParam:LPARAM LOCAL hOldClipViewer:HWND push ebx push esi push edi mov ebx, hWnd .IF Msg==WM_DESTROY invoke ChangeClipboardChain, ebx, hOldClipViewer ; Восстанавливаем старый клипбоард вьювер invoke PostQuitMessage, NULL .ELSEIF Msg==WM_INITDIALOG invoke SetClipboardViewer, hWnd ; Окно должно мониторить клипбоард mov hOldClipViewer, eax ; Сохраняю старый клипбоард вьювер .ELSEIF Msg==WM_COMMAND <далее не интересно> А ещё нужны флаги различные, ещё куча хэндлов всяких... Можно что нибудь с этим сделать? PS. Диалоговое окно у меня создается так: Код (Text): invoke RegisterClassEx, addr wc ; Класс регистрирую для проверки запущенной копии программы invoke CreateDialogParam, hInstance, ADDR MainDlgName, NULL, ADDR MainDlgProc, NULL or eax, eax jnz DialogCreated ret Может окно можно как нибудь по другому сделать?
ALLeX Собственно асм не С - и особой разницы между static и глобальной на уровне модуля переменной в нём просто не предусмотрено идеологией. Ограничить область видимости переменной можно либо поместив её внутрь макроса как local, тогда в другом макросе или основной программе можно будет использовать тоже имя. Или самому можно поизвращатся с реализацией перегрузки имён с помощью макросов, втихаря приписывающих номер к перегружаемому имени.