| 

.NET C# Java Javascript Exception

0
Ich versuche einen Zeiger auf eine Funktion an glutIdleFunc zu übergeben.

namespace WPFOpenGLLib 
{
public ref class OpenGLUserControl : public UserControl
{
....
delegate void MyDel();

// Funktion soll von glutIdleFunc aufgerufen werden
void anim()
{
OnIdle();
}

....
MyDel ^ StaticDelInst = gcnew MyDel(this, &WPFOpenGLLib::OpenGLUserControl::anim);
IntPtr myPtr = System::Runtime::InteropServices::Marshal::GetFunctionPointerForDelegate(StaticDelInst);
glutIdleFunc(myPtr);
};
}

Folgenede Fehlermeldung erhalte ich.
Fehler 5 error C2664: 'glutIdleFunc': Konvertierung des Parameters 1 von 'System::IntPtr' in 'void (__cdecl *)(void)' nicht möglich c:\users\mf\documents\visual studio 2010\projects\simulation\openglmanagedcpp\OpenGLUserControl.h 609 1 OpenGLManagedCpp

Wie übergebe ich den Zeiger von meiner managed C++ Klasse an glutIdleFunc?

Vielen Dank
20.03.2011
outdoorboy 11 1
2 Antworten
0
du musst noch zwei Dinge tun, den Delagaten pinnen mit pin_ptr
MyDel ^ StaticDelInst = gcnew MyDel(this, &WPFOpenGLLib::OpenGLUserControl::anim);
pin_ptr<MyDel^> myPinPtr= &StaticDelInst;

und dann die ToPointer()-Methode noch aufrufen:
glutIdleFunc((void)myPtr.ToPointer());

das Pinnen ist nötig damit der Garbage Collector den Pointer nicht verschiebt weil das native C++ keine Tracking-Referenzen hat und er könnte aus der sicht gehen.
21.03.2011
pinchbeck 373 7
0
Der Cast (void) mußte noch geändert werden. Hier der entgültig funktionierende Code.

MyDel^ StaticDelInst = gcnew MyDel(this, &WPFOpenGLLib::OpenGLUserControl::anim);
pin_ptr<MyDel^> myPinPtr = &StaticDelInst;
IntPtr myPtr = System::Runtime::InteropServices::Marshal::GetFunctionPointerForDelegate(StaticDelInst);
glutIdleFunc((void (__cdecl *)(void))myPtr.ToPointer());


Danke
21.03.2011
outdoorboy 11 1
so, und jetzt bitte meine antwort als lösung markieren und den pfeil nach oben klicken ;P
pinchbeck 25.03.2011

Stelle deine Cplusplus-Frage jetzt!
Sevitec Gruppe
myfactory International GmbH
InnoGames GmbH
infounit Software GmbH