Приложение Win32 сбоя в зависимости от метода, используемого для доступа к String [Duplicate]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Приложение Win32 сбоя в зависимости от метода, используемого для доступа к String [Duplicate]

Сообщение Anonymous »

Я экспериментирую с созданием абстракции на основе классов по API Win32, и я столкнулся с некоторым очень странным поведением, в зависимости от того, как я получаю доступ к одной и той же части данных, приложение будет либо сбоем с кодом ошибки 1407, либо работает как Ожидается.

Код: Выделить всё

bool Window::show(const GUI::Application *const app)
{
WNDCLASSEXW windowClass = { 0 };
windowClass.cbSize = sizeof(WNDCLASSEXW);
windowClass.lpfnWndProc = m_WindowProc;
windowClass.hInstance = app->getInstance();

// Load standard cursor
if (!(windowClass.hCursor = ::LoadCursorW(NULL, IDC_ARROW)))
{
return false;
}

windowClass.hbrBackground = reinterpret_cast(COLOR_WINDOW + 1);
windowClass.lpszClassName = app->getAppId().c_str();

// Register window class with system
if (!::RegisterClassExW(&windowClass))
{
return false;
}

OutputDebugStringW(L"Registered window class");

// Actually create the window
m_handle = ::CreateWindowExW(
0,
windowClass.lpszClassName,
m_title.c_str(),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
m_width, m_height,
NULL,
NULL,
app->getInstance(),
NULL
);

if (!m_handle)
{
DisplayErrorMessage(GetLastError());
return false;
}

OutputDebugStringW(L"Created window");

::ShowWindow(m_handle, app->getShowCmd());

OutputDebugStringW(L"ShowWindow executed, going into message loop");

MSG msg = { 0 };
while (::GetMessageW(&msg, NULL, 0, 0))
{
::TranslateMessage(&msg);
::DispatchMessageW(&msg);
}

// Cleanup resources
::UnregisterClassW(windowClass.lpszClassName, app->getInstance());

return true;
}
Если я изменяю windowsclass.lpszclassname в строке 28, чтобы быть app-> getAppid (). /p>
Почему это происходит? Они получают доступ точно одинаковые данные, и нет никакой изменения строки, выполненной между первым вызовом, к app-> getAppid (). C_str () в строке 15 и второй вызов в строке 28.
Обратите внимание: я знаю, что были вопросы на других форумах, связанных с этой темой, но ни один из этих ответов не объяснил, почему одна строка работала над другой, что я ищу с этим вопросом.

Подробнее здесь: https://stackoverflow.com/questions/649 ... ess-string
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»