Autor Beitrag
asoechting
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 03.08.10 10:05 
Hallo liebe Forenmitglieder,

ich bekomme eine AccessViolationException in meiner C++ Wrapper-Klasse (managed Code), wenn ich versuche, eine Funktion aus einer unmanaged lib aufzurufen. Die Exception tritt nur sporadisch auf.
Die Codezeile, in der die Exception ausgelöst wird lautet:

int ret = this->grabber_ptr->startGrab();

Dabei ist grabber_ptr ein Zeiger auf ein Objekt, der für die Wrapperklasse als privates Attribut deklariert wurde. Es gibt eine Methode in der Wrapperklasse, die zunächst diesem Zeiger ein gültiges Objekt zuweist. Danach wird auf den Zeiger in verschiedenen Methoden zugegriffen, wie z.B. in obiger Codezeile. Ich gehe davon aus, dass der Zeiger so lange gültig ist, wie das Wrapper-Objekt selbst. Dieses wird in einer C# Klasse als privates Objekt angelegt, so dass es während der gesamten Ausführungszeit des Programms gültig sein sollte. Was kann ich tun, um solche Exception zu vermeiden?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 03.08.10 18:29 
Ich kenne mich mit C++/CLI nicht aus, aber ein Pointer dürfte schnell ungültig werden, wenn das Objekt vom GC verschoben wird. Warum denn keine managed Referenz?

_________________
>λ=