GetClientRect schlägt in managed Projekt fehl

16/11/2007 - 12:02 von Alexander Mueller | Report spam
Hallo

ich habe ein ursprünglich unmanaged'es Projekt, in dem ich mit
Windows Media Format SDK und GDI zu tun habe.
Unmanaged làüft alles, es soll nun aber in einen managed Solution
eingebunden werden und auch weitgehend alle *.cpp files
managed compliert werden.

Nun fangen die Probleme schon bei so Trivialitàten wie
GetClientRect an:


HWND hwnd = FindWindowA("ExploreWClass", NULL);
if (!IsWindow(hwnd))
return false;

RECT * pClientRect;
if (FALSE == GetClientRect (hwnd , pClientRect))
return false;

Beim Aufruf von GetClientRect erhalte ich die Exception:

"Un unhandled exception of type 'System.AccessViolationException'
occurred in UncompressedSourceBMP.exe

Additional information: Es wurde versucht, im geschützten Speicher zu
lesen oder zu schreiben. Dies ist hàufig ein Hinweis darauf, dass
anderer Speicher beschàdigt ist."


Wie gesagt als unmanaged Win32-Projekt làuft es sauber ohne
Access-violations.
Aber scheinbar vertràgt sich der Zugriff nicht mit dem managed
Sicherheitskonzept für Speicherzugriffe.

Kann ich das Problem lösen wenn ich VC.NET handles (^-Syntax)
statt Pointer verwende oder ist es ein Grundlegendes Problem der
Unvertràglichkeit mancher API-Aufrufe mit managed Code?

Bin für alle Tipps dankbar,


MfG,
Alex
 

Lesen sie die antworten

#1 Jochen Kalmbach [MVP]
16/11/2007 - 12:18 | Warnen spam
Hallo Alexander!
RECT * pClientRect;
if (FALSE == GetClientRect (hwnd , pClientRect))
return false;

"Un unhandled exception of type 'System.AccessViolationException'
occurred in UncompressedSourceBMP.exe




Ich hoffe, dass der obige Code nicht Dein ernst ist

Du übergibst hier einen nicht initialisierten Zeiger!
Das hat mit managed/unmanaged nichts zu tun...

Ändere es mal nach

RECT clientRect;
if (FALSE == GetClientRect (hwnd, &clientRect))
return false;

Greetings
Jochen

Ähnliche fragen