![]() |
Rückgabe von hModul ist fehlerhaft
Eigentlich funktioniert das..
Code:
aber wenn ich diese Funktion aufrufe um einen Font zu erstellen.
HMODULE gdiplib() {
static HMODULE hGdip; if (hGdip == 0) { hGdip = LoadLibrary(L"GDIPLUS"); } return hGdip; }
Code:
GdipCreateFont(fontfam, (float)UseSize, 0, 2, TempFont);
Code:
ist TempFont immer 0 weil das hModule den wert 0xfefefefe zurück gibt.
long GdipCreateFont(IN LONG_PTR fontFamily, IN float emSize, IN long style, IN long unit, OUT LONG_PTR &font) {
long nRet = -1; // Error font = 0; HMODULE hModule = gdiplib(); if (hModule) { long_proc(LONG_PTR, float, long, long, LONG_PTR*); static zProc hProc; if (hProc == 0) { hProc = (zProc)GetProcAddress(hModule, "GdipCreateFont"); } if (hProc) { nRet = hProc(fontFamily, emSize, style, unit, &font); } } return nRet; } Zitat:
Warum gehen mir ständig die Handles verloren. Unter Delphi habe ich mit solchen Problemen nicht zu kämpfen. gruss |
AW: Rückgabe von hModul ist fehlerhaft
Hallo,
OUT LONG_PTR &font) { Hm, das wäre jetzt ein Doppelpointer. Reicht denn nicht OUT LONG_long &font oder OUT LONG_PTR font) { |
AW: Rückgabe von hModul ist fehlerhaft
Zitat:
Code:
Und hier wird nun mal ein Doppelpointer verlangt.
GpStatus WINGDIPAPI GdipCreateFont( GDIPCONST GpFontFamily *fontFamily, REAL emSize, INT style, Unit unit, GpFont **font )
Das ist aber nicht mein Problem sondern das mir die Handles verloren gehen. EDIT: Es sieht so aus das VC++ extrem auf Speicherlecks reagiert das ist wohl auch der Grund warum dann von Speicher nicht gelesen werden kann. gruss |
AW: Rückgabe von hModul ist fehlerhaft
Zitat:
Hat es btw einen bestimmten Grund, dass du die GDI+ dynamisch lädst? Den NULL Check kannst du dir übrigens sparen. Statics werden eh nur einmalig initialisiert:
Code:
HMODULE gdiplib()
{ static HMODULE hGdip = LoadLibrary(L"GDIPLUS"); return hGdip; } |
AW: Rückgabe von hModul ist fehlerhaft
Hallo,
um noch mal auf die Ausgangsfrage zurückzukommen: long GdipCreateFont(IN LONG_PTR fontFamily, IN float emSize, IN long style, IN long unit, OUT LONG_PTR &font) { long nRet = -1; // Error font = 0; HMODULE hModule = gdiplib(); // ** // // ** // hier ist jetzt hModule irgendwann nicht mehr der Wert, der ursprünglich in hGdip stand? D.h. die static-Variable ist durch irgendwas überschrieben worden? |
AW: Rückgabe von hModul ist fehlerhaft
Zitat:
Code:
der beträgt irgendwann 0xFEFEFEFEFE
HMODULE gdiplib()
{ static HMODULE hGdip = LoadLibrary(L"GDIPLUS"); return hGdip; } EDIT: Zitat:
gruss |
AW: Rückgabe von hModul ist fehlerhaft
Zitat:
Da kann ich nur sagen "Viel Spass beim suchen":-D |
AW: Rückgabe von hModul ist fehlerhaft
Zitat:
Habe meine eigene Funktion wieder eingebunden ohne den <vector> Kram. gruss |
AW: Rückgabe von hModul ist fehlerhaft
Also Emil
mit Dir ist es manchmal schon lustig..... Zitat:
|
AW: Rückgabe von hModul ist fehlerhaft
Zitat:
Na man sollte auch mal Herzhaft lachen dürfen ;) gruss |
AW: Rückgabe von hModul ist fehlerhaft
Das Problem bei überschriebenem Speicher ist, dass durch eine Änderung am Quelltext an einer ganz anderen Stelle das Überschreiben rein zufällig aussehende Effekte haben kann. Oder eben keine Effekte mehr.
Solange du also nicht die Ursache dafür gefunden hast, wirst du das Problem, dass plötzlich etwas ganz unlogisch passiert, immer wieder haben. Aber eben nicht voraussagbar und oft an ganz anderen Stellen als die Ursache und auch als die letzte Änderung. Insofern macht es, wenn wirklich Speicher überschrieben wurde, wenig Sinn einfach zu hoffen, dass es kein Problem mehr gibt, wenn die Änderung nicht zielgerichtet das eigentliche Problem behoben hat... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz