Die Win32 -App stürzt ab, abhängig von der Methode zum Zugriff auf String [Duplikat]C++

Programme in C++. Entwicklerforum
Anonymous
 Die Win32 -App stürzt ab, abhängig von der Methode zum Zugriff auf String [Duplikat]

Post by Anonymous »

Ich experimentiere mit der Erstellung einer klassenbasierten Abstraktion gegenüber der Win32-API und bin auf ein sehr seltsames Verhalten gestoßen, bei dem abhängig davon, wie ich auf dieselbe Daten zugriff, die Anwendung entweder mit Fehlercode 1407 abstürzt oder als als wirkt Erwartet. < /p>
Hier ist ein Ausschnitt aus meinem Fenster.

Code: Select all

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;
}
Wenn ich WindowsClass.lpsZClassName in Zeile 28 app-> getAppid (). c_str () ändere, stürzt die Anwendung mit dem Fehlercode 1407 ab. /p>
Warum passiert das? Sie greifen genau auf die gleichen Daten zu, und es gibt keine Änderung der Zeichenfolge, die zwischen dem ersten Anruf an app-> getAppid (). C_str () in Zeile 15 und der zweite Anruf in Zeile 28. p>
Bitte beachten Sie: Ich weiß, dass es in anderen Foren zu diesem Thema Fragen gab, aber keine dieser Antworten hat tatsächlich erklärt, warum eine Zeile über die andere über die andere gearbeitet hat, was ich mit dieser Frage suche.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post