- Module 1. Your First Windows Program
- Память не может быть READ или WRITTEN в Windows
- 1. Сканирование на вирусы
- 2. Сторонний антивирус
- 3. Поврежденные системные файлы
- 4. Изоляция ядра в защитнике
- 5. Установка .Net Framework
- 6. Виртуальная память
- 7. Автозагрузка
- 8. Чистая загрузка
- 9. Обновите систему
- 10. Диагностика RAM
- Overview of Windows Programming in C++
- Command line (console) applications
- Native desktop client applications
- C++ or .NET?
- COM Components
- Universal Windows Platform apps
- Desktop Bridge
- Games
- SQL Server database clients
- Windows device drivers
- Windows services
- SDKs, libraries, and header files
- Development Tools
Module 1. Your First Windows Program
In this module, we will write a minimal Windows desktop program. All it does is create and show a blank window. This first program contains about 50 lines of code, not counting blank lines and comments. It will be our starting point; later we’ll add graphics, text, user input, and other features.
If you are looking for more details on how to create a traditional Windows desktop application in Visual Studio, check out Walkthrough: Create a traditional Windows Desktop application (C++).
Here is the complete code for the program:
You can download the complete Visual Studio project from Windows Hello World Sample.
It may be useful to give a brief outline of what this code does. Later topics will examine the code in detail.
- wWinMain is the program entry point. When the program starts, it registers some information about the behavior of the application window. One of the most important items is the address of a function, named WindowProc in this example. This function defines the behavior of the window—its appearance, how it interacts with the user, and so forth.
- Next, the program creates the window and receives a handle that uniquely identifies the window.
- If the window is created successfully, the program enters a while loop. The program remains in this loop until the user closes the window and exits the application.
Notice that the program does not explicitly call the WindowProc function, even though we said this is where most of the application logic is defined. Windows communicates with your program by passing it a series of messages. The code inside the while loop drives this process. Each time the program calls the DispatchMessage function, it indirectly causes Windows to invoke the WindowProc function, once for each message.
Память не может быть READ или WRITTEN в Windows
Когда в системе Windows не удалось прочитать инструкцию из указанной памяти, то пользователь получит ошибку, что память не может быть read или written. В Windows 10 данная ошибка редкость, чаще всего её можно было встретить в Windows XP или Windows 7 с кодом 0x00000000. Ошибка происходит когда программа, системный файл или драйвер обращается с своей инструкцией к физической памяти ОЗУ и не может прочитать нужные действия в определенных фрагментах памяти. Виновником, когда память не может быть read или written, могут быть поврежденные системные файлы, планки ОЗУ повреждены, нехватка виртуальной памяти или сама программа установилась криво. Давайте разберем, как устранить ошибку с чтением памяти read или written.
1. Сканирование на вирусы
Воспользуйтесь антивирусным сканером как Zemana или Dr.Web. Если система заражена вредоносной программой, то инструкции в памяти могут не читаться и вызывать различные ошибки.
2. Сторонний антивирус
Если вы используете сторонний антивирус, то отключите его и посмотрите устранена ли ошибка с памятью «read» или «written». Если ошибка будет устранена, то стоит задуматься о смене антивирусного ПО.
3. Поврежденные системные файлы
Поврежденные системные файлы, которые обращаются к физической память могут выдавать данную ошибку, так как адрес системного файла будет модифицирован и не прочтется в ОЗУ. Запустите командную строку от имени администратора и введите две команды по очереди, чтобы восстановить системные файлы.
- sfc /scannow
- DISM /ONLINE /CLEANUP-IMAGE /RESTOREHEALTH
4. Изоляция ядра в защитнике
Функция изоляция ядра может не давать доступ к памяти программам, драйверам или системным файлам, что приведет к ошибке «Память не может быть READ или WRITTEN«. Откройте встроенный антивирус «Безопасность Windows» и перейдите в графу «Безопасность устройства». Далее отключите «Целостность памяти«, если она была включена.
5. Установка .Net Framework
Если инструкция по адресу 0x79259769, ссылается на память по адресу 0x00000008 и не может быть read или written, то старые программы могут использовать устаревший NET Framework 1.1, который и будет создавать перегрузку ОЗУ, что и приведет к ошибке. Перейдите на сайт Microsoft и скачайте последнюю версию NET Framework. В данный момент это 4.8.
6. Виртуальная память
Нехватка виртуальной памяти может вызывать ошибку, когда память не может быть read или written, если запустить прожорливую программу или игру. В данной ситуации, увеличения виртуальной памяти может решить данную проблему.
Нажмите сочетание кнопок на клавиатуре Win+G и введите sysdm.cpl, чтобы быстро открыть свойства системы. Перейдите во вкладку «Дополнительно», нажмите «Параметры» и в новом окне перейдя во вкладку «Дополнительно», нажмите «Изменить«.
Далее у вас два пути:
- Если у вас не стоит галочка «Автоматически выбирать объем файла подкачки», то установите галочку. Диск C, где установлена Windows, должен быть задан по выбору системы.
- Если 1 способ не помог решить проблему, то задайте вручную память, беря значения снизу.
Если вы хотите досконально разобраться, как правильно настроить и какие размеры задавать виртуальной памяти, то прочтите это руководство по файлу подкачки .
7. Автозагрузка
Если при запуске компьютера запускаются много программ, то может быть нехватка памяти. В Windows 10 откройте диспетчер задач нажав сочетание кнопок Ctrl+Shift+Esc и перейдите во вкладку «Автозагрузка». Далее выберите программы, которые не сильно вам нужны и нажмите «Отключить».
В Windows 7 и XP нажмите Win+R и введите msconfig, перейдите во вкладку «Автозагрузка».
8. Чистая загрузка
Выполнение чистой загрузки Windows позволит вам исключить виновника данной ошибки как системные службы. Если в этой загрузке у вас не будет ошибки, то виновник будет являться программа, драйвер и все стороннее, что не связано с системными файлами. Я подробно описывал, как выполнить чистую загрузку Windows 10 .
9. Обновите систему
Обновите систему Windows до последней версии через параметры центра обновления. Помните, если вы используете Windows скаченную с торрента, то в ней могут быть вирусы уже с разрешенными правами и урезанные системные компоненты, которые не смогут работать правильно.
10. Диагностика RAM
Ошибки в оперативной памяти могут вызывать ошибку «память не может быть written или read». Следуйте этому руководству по диагностике RAM , чтобы проверить ошибки и исправить их.
Если ошибка не устранена, то проблема может быть физическая в самой планке ОЗУ. Попробуйте поменять местами планки, и вставлять их по очереди в разные разъемы.
Overview of Windows Programming in C++
There are several broad categories of Windows applications that you can create with C++. Each has its own programming model and set of Windows-specific libraries, but the C++ standard library and third-party C++ libraries can be used in any of them.
This section discusses how to use Visual Studio and the MFC/ATL wrapper libraries to create Windows programs. For documentation on the Windows platform itself, see Windows documentation.
Command line (console) applications
C++ console applications run from the command line in a console window and can display text output only. For more information, see Create a console calculator in C++.
Native desktop client applications
A native desktop client application is a C or C++ windowed application that uses the original native Windows C APIs or Component Object Model (COM) APIs to access the operating system. Those APIs are themselves written mostly in C. There’s more than one way to create a native desktop app: You can program using the Win32 APIs directly, using a C-style message loop that processes operating system events. Or, you can program using Microsoft Foundation Classes (MFC), a lightly object-oriented C++ library that wraps Win32. Neither approach is considered «modern» compared to the Universal Windows Platform (UWP), but both are still fully supported and have millions of lines of code running in the world today. A Win32 application that runs in a window requires the developer to work explicitly with Windows messages inside a Windows procedure function. Despite the name, a Win32 application can be compiled as a 32-bit (x86) or 64-bit (x64) binary. In the Visual Studio IDE, the terms x86 and Win32 are synonymous.
To get started with traditional Windows C++ programming, see Get Started with Win32 and C++. After you gain some understanding of Win32, it will be easier to learn about MFC Desktop Applications. For an example of a traditional C++ desktop application that uses sophisticated graphics, see Hilo: Developing C++ Applications for Windows.
C++ or .NET?
In general, .NET programming in C# is less complex, less error-prone, and has a more modern object-oriented API than Win32 or MFC. In most cases, its performance is more than adequate. .NET features the Windows Presentation Foundation (WPF) for rich graphics, and you can consume both Win32 and the modern Windows Runtime API. As a general rule, we recommend using C++ for desktop applications when you require:
- precise control over memory usage
- the utmost economy in power consumption
- usage of the GPU for general computing
- access to DirectX
- heavy usage of standard C++ libraries
It’s also possible to combine the power and efficiency of C++ with .NET programming. You can create a user interface in C# and use C++/CLI to enable the application to consume native C++ libraries. For more information, see .NET Programming with C++/CLI.
COM Components
The Component Object Model (COM) is a specification that enables programs written in different languages to communicate with one another. Many Windows components are implemented as COM objects and follow standard COM rules for object creation, interface discovery, and object destruction. Using COM objects from C++ desktop applications is relatively straightforward, but writing your own COM object is more advanced. The Active Template Library (ATL) provides macros and helper functions that simplify COM development. For more information, see ATL COM desktop components.
Universal Windows Platform apps
The Universal Windows Platform (UWP) is the modern Windows API. UWP apps run on any Windows 10 device, use XAML for the user-interface, and are fully touch-enabled. For more information about UWP, see What’s a Universal Windows Platform (UWP) app? and Guide to Windows Universal Apps.
The original C++ support for UWP consisted of (1) C++/CX, a dialect of C++ with syntax extensions, or (2) the Windows Runtime Library (WRL), which is based on standard C++ and COM. Both C++/CX and WRL are still supported. For new projects, we recommend C++/WinRT, which is entirely based on standard C++ and provides faster performance.
Desktop Bridge
In Windows 10, you can package your existing desktop application or COM object as a UWP app, and add UWP features such as touch, or call APIs from the modern Windows API set. You can also add a UWP app to a desktop solution in Visual Studio, and package them together in a single package and use Windows APIs to communicate between them.
Visual Studio 2017 version 15.4 and later lets you create a Windows Application Package Project to greatly simplify the work of packaging your existing desktop application. A few restrictions apply to the registry calls or APIs your desktop application can use. However, in many cases you can create alternate code paths to achieve similar functionality while running in an app package. For more information, see Desktop Bridge.
Games
DirectX games can run on the PC or Xbox. For more information, see DirectX Graphics and Gaming.
SQL Server database clients
To access SQL Server databases from native code, use ODBC or OLE DB. For more information, see SQL Server Native Client.
Windows device drivers
Drivers are low-level components that make data from hardware devices accessible to applications and other operating system components. For more information, see Windows Driver Kit (WDK).
Windows services
A Windows service is a program that can run in the background with little or no user interaction. These programs are called daemons on UNIX systems. For more information, see Services.
SDKs, libraries, and header files
Visual Studio includes the C Runtime Library (CRT), the C++ Standard Library, and other Microsoft-specific libraries. Most of the include folders that contain header files for these libraries are located in the Visual Studio installation directory under the \VC\ folder. The Windows and CRT header files are found in the Windows SDK installation folder.
The Vcpkg package manager lets you conveniently install hundreds of third-party open-source libraries for Windows.
The Microsoft libraries include:
Microsoft Foundation Classes (MFC): An object-oriented framework for creating traditional Windows programs—especially enterprise applications—that have rich user interfaces that feature buttons, list boxes, tree views, and other controls. For more information, see MFC Desktop Applications.
Active Template Library (ATL): A powerful helper library for creating COM components. For more information, see ATL COM Desktop Components.
C++ AMP (C++ Accelerated Massive Parallelism): A library that enables high-performance general computational work on the GPU. For more information, see C++ AMP (C++ Accelerated Massive Parallelism).
Concurrency Runtime: A library that simplifies the work of parallel and asynchronous programming for multicore and many-core devices. For more information, see Concurrency Runtime.
Many Windows programming scenarios also require the Windows SDK, which includes the header files that enable access to the Windows operating system components. By default, Visual Studio installs the Windows SDK as a component of the C++ Desktop workload, which enables development of Universal Windows apps. To develop UWP apps, you need the Windows 10 version of the Windows SDK. For information, see Windows 10 SDK. (For more information about the Windows SDKs for earlier versions of Windows, see the Windows SDK archive).
Program Files (x86)\Windows Kits is the default location for all versions of the Windows SDK that you’ve installed.
Other platforms such as Xbox and Azure have their own SDKs that you may have to install. For more information, see the DirectX Developer Center and the Azure Developer Center.
Development Tools
Visual Studio includes a powerful debugger for native code, static analysis tools, graphics debugging tools, a full-featured code editor, support for unit tests, and many other tools and utilities. For more information, see Get started developing with Visual Studio, and Overview of C++ development in Visual Studio.