Ich habe Probleme, einige Winapi-Code auszuführen. Ich weiß nicht, ob der Grund dafür ist, dass ich etwas beim Kompilieren verpasst habe oder das Testprogramm falsch ist. aber wenn ich das Programm ausführe, gibt die Bitmap-Definitionszeile einen segfault.Segmentierungsfehler, der versucht, ein MinGW kompiliertes C++ Winapi-Testprogramm auszuführen
hier ist das Prüfprogramm
#include <windows.h>
#include <gdiplus.h>
int WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
Gdiplus::PixelFormat* pf = new Gdiplus::PixelFormat();
Gdiplus::Bitmap* bitmap = new Gdiplus::Bitmap(100, 100, *pf);
return 0;
}
und hier ist die Kompilation Anweisung:
> mingw32-g++ main.cpp -lgdiplus -o main.exe
Wenn ich ausführen, ich diesen Wurf haben:
Program received signal SIGSEGV, Segmentation fault.
0x00403da3 in Gdiplus::Image::Image (this=0x0, image=0x0, status=Gdiplus::Ok) at c:/mingw/include/gdiplus/gdiplusheaders.h:142
142 nativeImage(image), lastStatus(status) {}
ich einige tat Winapi Tutorial und erstellt ein Fenster vor, so denke ich, dass meine MinGW Installation nichts falsch ist.
Was könnte das Problem sein?
Ich glaube nicht, 'Gdiplus :: Pixelformat * pf = new Gdiplus :: Pixelformat();' richtig ist. 'PixelFormat' ist nur ein int, also was du sagst, heißt' Gdiplus :: Bitmap' mit 0. Du sollst eine der [definierten Pixelformat-Konstanten] übergeben (https://msdn.microsoft.com/ de-de/library/ms534412 (v = V.85) .aspx). Außerdem müssen Sie in C++ nicht alles "neu" machen. Normalerweise ist es besser, wenn du gar nicht "neu" bist. – user4581301
GDI + benötigt auch explizite Initialisierung. Ich weiß nicht, wie man das in C++ macht. – andlabs
Windows gibt keine Segmentierungsfehler aus. Was ist Ihre Laufzeitumgebung? – IInspectable