(function(){
var foo = {
name: 'bob'
};
console.log(foo.name); // bob
})();
console.log(foo.name); // Reference error
На самом деле вышеуказанная функция будет рассматриваться как выражение функции без имени.
Основная цель обертывания функции с закрытыми и открытыми круглыми скобками заключается в том, чтобы избежать загрязняя глобальное пространство.
Переменные и функции внутри выражения функции стали частными (т. е. они не будут доступны вне функции.
wParam
и lParam
изменились во многих местах. Я сильно поощряю Вас быть параноиками и преобразовать как можно больше для использования взломщики сообщения . Они сохранят Вас никакой конец головных болей. Если бы существует только один совет, я мог бы дать Вам, это было бы им. STRICT
. Это поможет Вам поймать кодовую базу Win16 с помощью int
, где это должно использовать HWND
, HANDLE
, или что-то еще. Преобразование их значительно поможет с № 9 в этом списке. hPrevInstance
бесполезно. Удостоверьтесь, что это не используется. TCHAR
с, но подразумеваете, что лучше заменяете OpenFile
, _lopen
, и _lcreat
с [1 111], назвать очевидное LibMain
теперь DllMain
, и весь формат библиотеки и конвенции экспорта отличающиеся GlobalAlloc
, LocalAlloc
, GlobalFree
, и LocalFree
должен быть заменен более современными эквивалентами. При выполнении очистите вызовы к [1 118], LocalUnlock
и друзья; они теперь бесполезны. Не то, чтобы я могу вообразить Ваше приложение, делающее это, но удостовериться, что Вы не зависите от [1 120], в то время как Вы там. SendMessage
или PostMessage
для отправки указателей на окна из процесса. Необходимо будет переключиться на более современный механизм IPC, такой как каналы или файлы с отображенной памятью. SendMessage
и ожидать сообщения, которое будет обработано. Это может быть плохой идеей теперь. Рассмотрите, не является ли PostMessage
более оптимальным вариантом. int
в [1 126] и так далее когда это применимо. РЕДАКТИРОВАНИЕ : Как @ChrisN указывает, , официальное руководство для портирования приложений Win16 к Win32 все еще доступно, и оба излагают в деталях и добавляют к моим точкам выше.
Существует полное руководство в статье , Портирующей 16-битный код на 32-разрядный Windows на MSDN.
Кроме разбирания в Вашей среде сборки, Вот немного специфических особенностей, к которым необходимо будет обратиться:
структуры, содержащие ints, должны будут измениться на короткий или расшириться с 16 до 32 битов. Если Вы изменяете размер структуры, и это загружается/сохраняется в диск, Вы должны будете написать код обновления файла данных.
данные окна Per часто хранятся с дескриптором окна с помощью GWL_USERDATA. При расширении некоторых данных к 32 битам смещения изменятся.
ТОЧКА & структуры РАЗМЕРА составляют 64 бита в Win32. В Win16 они были 32 бита и могли быть возвращены как DWORD (вызывающая сторона разделит возвращаемое значение на два 16 битовых значений). Это больше не работает в Win32 (т.е. Win32 не возвращает результаты на 64 бита), и функции были изменены, чтобы принять, что указатели хранят возвращаемые значения. Необходимо будет отредактировать все их. API как GetTextExtent затронуты этим. Эта та же проблема также относится к некоторым сообщениям Windows.
использованию файлов INI препятствуют в Win32 в пользу реестра. В то время как функции файла INI все еще работают, необходимо будет быть осторожными с проблемами Vista. 16 битных программ часто хранили свой файл INI в системном каталоге Windows.
Это - всего несколько проблем, которые я могу вспомнить. Это было более чем десятилетие, с тех пор как я сделал любое портирование Win32. Как только Вы входите в него, это довольно быстро. Каждая кодовая база будет иметь свое собственное "чувство" когда дело доходит до портирования, к которому Вы привыкнете. Вы, вероятно, даже найдете несколько ошибок по пути.
Оригинал win32 sdk имел инструмент, который просканировал исходный код и отметил строки, которые должны были быть изменены, но я не могу помнить название инструмента.
, Когда я должен был сделать это в прошлом, я использовал метод грубой силы - т.е.: 1 - обновляют make-файлы или среду сборки для использования компилятора на 32 бита и компоновщика. Дополнительно, просто создайте новый проект в своем IDE (я использую Visual Studio), и добавьте файлы вручную.
2 - сборка
3 - фиксируют ошибки
4 - повторение 2& 3, пока не сделано
боль процесса зависит от приложения, которое Вы перемещаете. Я преобразовал 10 000 программ строки за час и 75 000 программ строки меньше чем за неделю. У меня также были некоторые маленькие утилиты, от которых я просто разочаровался и переписал (главным образом) с нуля.
Я соглашаюсь с Alan, что метод проб и ошибок является, вероятно, лучшим способом.
Вот некоторая польза подсказки .
Согласованный, что компилятор, вероятно, зафиксирует большинство ошибок. Кроме того, при использовании "близких" и "далеких" указателей, можно удалить те обозначения - указатель является просто указателем в Win32.