Seite 1 von 1

Typenkonvertation nicht möglich C++

Verfasst: Do Sep 03, 2009 7:14 pm
von cloidnerux
Ich habe in einem OpenGL Programm folgende Codezeile:

Code: Alles auswählen

windowClass.lpfnWndProc = &testClass::StaticWndProc;
Doch der Compiler meldet immer nur folgende Fehlermeldung:
error C2440: '=': 'LRESULT (__stdcall CADEngine::* )(HWND,UINT,WPARAM,LPARAM)' kann nicht in 'WNDPROC' konvertiert werden
1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist
Ich habe es auch ohne "&" versucht, ohne "testClass::" davor, mit C- und C++-Casts aber alles Führte zu anderen Fehlermeldungen.
Ist ein Windowsprojekt unter Visual Studio 2009.

MfG cloidnerux.

Re: Typenkonvertation nicht möglich C++

Verfasst: Do Sep 03, 2009 7:28 pm
von fat-lobyte
cloidnerux hat geschrieben:Ich habe in einem OpenGL Programm folgende Codezeile:

Code: Alles auswählen

windowClass.lpfnWndProc = &testClass::StaticWndProc;
Einfach nur diese Zeile ist ziemlich schwer. Bitte Zeig uns auch die deklaratione
cloidnerux hat geschrieben:Ist ein Windowsprojekt unter Visual Studio 2009.
Kenn ich nicht... Kenn nur Visual Studio 2008 oder Visual Studio 2010 ^^
Welchen hast du jetzt wirklich?

Re: Typenkonvertation nicht möglich C++

Verfasst: Do Sep 03, 2009 7:42 pm
von cloidnerux
Kenn ich nicht... Kenn nur Visual Studio 2008 oder Visual Studio 2010 ^^
Sry, Version 9 laos Visual Studio 2008.

Code: Alles auswählen

LRESULT CALLBACK StaticWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
Das ist di Funktionsdefinition dessen Addresse ich haben will.
Die Obige Codezeile ist in der Init Funktion der selben Klasse, also zugrifff ist gewärt.
Müsste ich nicht über this-> den pointer aufrufen?

Re: Typenkonvertation nicht möglich C++

Verfasst: Do Sep 03, 2009 7:53 pm
von fat-lobyte
cloidnerux hat geschrieben:Ich habe in einem OpenGL Programm folgende Codezeile:

Code: Alles auswählen

windowClass.lpfnWndProc = &testClass::StaticWndProc;
Doch der Compiler meldet immer nur folgende Fehlermeldung:
error C2440: '=': 'LRESULT (__stdcall CADEngine::* )(HWND,UINT,WPARAM,LPARAM)' kann nicht in 'WNDPROC' konvertiert werden
1> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist
Jetzt verstehe ich langsam... CADEngine ist die Klasse von testClass... oder wie??? Das braucht erklärung. was ist testClass, was ist CADEngine, was ist windowClass?? Ohne das ist es ziemlich schwierig dir zu helfen...

Du darfst wie du schon richtig gesagt hast nicht vergessen dass du bei Memberfunktionen noch einen versteckten Zeiger mitgeben musst, es sei denn sie sind static (ist StaticWndProc static? ich weiß es nicht, denn ich habe die deklaration nicht gesehen)

Re: Typenkonvertation nicht möglich C++

Verfasst: Do Sep 03, 2009 7:58 pm
von cloidnerux
Also, CADEngine ist die Classe, StaticWndProc ist eine Memberfunktion der classe, die ich nicht static setzten kann, da sie extern Deklariert wird.
Ich versuche in der Init Funktion diesem aus der WinAPI stammenden Struct den Pointer zu dieser Memeberfunktion zu übergeben.
Doch er akzeptiert die Pointerkonvertiereung nicht.
Bei der Memberfunktion handelt es sich um den "Eventhandler" der Winapi, der egt nur eine andere Funktion aufruft um zugriff auf Classenmebeer zu bekommen.
Desswegen hat diese Funktion auch die Typischen LRESULT CALLBACK &%*! am anfang, egt sollte der Compiler das annehmen, doch will er das nicht.

Edit: Ich weiß jezt warum er die static Funktion nicht akzeptieren wollte, man muss den Funktionsprototypen mit static ausweisen, jedoch die Deklaration erfolgt ohne static, was ich nicht beachtet hatte. Jetzt funktioniert es. Danke an alle.