Ersatz für GlobalAlloc()
-
Und mit GlobalAlloc() funktioniert's?
-
dot schrieb:
Und mit GlobalAlloc() funktioniert's?
Ja weil das von MS im Beispiel vorhanden ist, siehe
Meine Frage wäre ob es mit modernen C++ Sprachmitteln einen Ersatz für das angestaubte GlobalAlloc gibt.
Ich möchte so gut wie es geht auf reine C Elemente verzichten.
-
MFC-Coder schrieb:
dot schrieb:
Und mit GlobalAlloc() funktioniert's?
Ja weil das von MS im Beispiel vorhanden ist, siehe
Ich meine: Mit GlobalAlloc() funktioniert es bei dir in deiner Anwendung und mit was anderem nicht? Weil ansonsten kann der Fehler natürlich alles mögliche sein...
-
Ist jetzt natürlich richtig pfiffig, den nicht funktionierenden Code auch nicht zu zeigen...
-
GlobalAlloc ist nur noch aus Kompatibilitätsgründen zu 16bit Anwendungen vorhanden und tut nichts anderes als HeapAlloc aufzurufen.
[quote="MFC-Coder"]
dot schrieb:
Meine Frage wäre ob es mit modernen C++ Sprachmitteln einen Ersatz für das angestaubte GlobalAlloc gibt.
Ich möchte so gut wie es geht auf reine C Elemente verzichten.Ganz egal welche "C++ Ersatzfunktion" Du aufrufst, sie wird letzten Endes HeapAlloc aufrufen.
-
Ganz klar: GlobalAlloc ist nicht notwenig.
DialogBoxIndirect nimmt jeden Zeiger.
Die MFC macht es nicht anders und ich habe diese Templates auch schon in x-Varianten aufgebaut.Diu weißt was der Fehler 1814 bedeutet?
"Der angegebene Ressourcenname wurde nicht in der Image-Datei gefunden."Hört sich nach was anderem an...
-
Martin Richter schrieb:
Diu weißt was der Fehler 1814 bedeutet?
"Der angegebene Ressourcenname wurde nicht in der Image-Datei gefunden."Hört sich nach was anderem an...
Der Fehler kam nachdem ich DLGTEMPLATE anstatt LPDLGTEMPLATE benutzte.
---
Funktioniert so:HGLOBAL global = nullptr; LPDLGTEMPLATE dialogTemplate; global= GlobalAlloc(GMEM_ZEROINIT, 1024); if (!global) return false; dialogTemplate = (LPDLGTEMPLATE)GlobalLock(global); dialogTemplate->style = WS_POPUP | WS_VISIBLE | WS_CAPTION; dialogTemplate->dwExtendedStyle = DS_SETFONT | DS_FIXEDSYS | DS_MODALFRAME; dialogTemplate->cdit = 0; dialogTemplate->x = 0; dialogTemplate->y = 0; dialogTemplate->cx = 16; dialogTemplate->cy = 16; GlobalUnlock(global); returnValue = createDialog(dialogTemplate, this->parentWindow); GlobalFree(global);
---
Fehler:
HGLOBAL global = nullptr; LPDLGTEMPLATE dialogTemplate; dialogTemplate->style = WS_POPUP | WS_VISIBLE | WS_CAPTION; dialogTemplate->dwExtendedStyle = DS_SETFONT | DS_FIXEDSYS | DS_MODALFRAME; dialogTemplate->cdit = 0; dialogTemplate->x = 0; dialogTemplate->y = 0; dialogTemplate->cx = 16; dialogTemplate->cy = 16; returnValue = createDialog(dialogTemplate, this->parentWindow);
Hier gibts ne Schreibzugriffsverletzung: "dialogTemplate war nullptr".
-
Das ist irgendwie klar. Jetzt musst du bloss noch C lernen.
-
hustbaer schrieb:
Das ist irgendwie klar. Jetzt musst du bloss noch C lernen.
Eine Initialisierung von dialogTemplate um den Laufzeitfehler zu vermeiden erzeugt den Fehler 1814!
-
hustbaer schrieb:
Das ist irgendwie klar. Jetzt musst du bloss noch C lernen.
MFC-Coder schrieb:
Hier gibts ne Schreibzugriffsverletzung: "dialogTemplate war nullptr".
Ach ne... Warum nur?
MFC Coder schrieb:
Eine Initialisierung von dialogTemplate um den Laufzeitfehler zu vermeiden erzeugt den Fehler 1814!
Und wie hast Du das gemacht? Versuch doch uns wenigstens etwas zu helfen in dem Du den Code sendest der Probleme macht...