Handling von Events, ausgelöst in unmanaged code, in einer wrapper klasse (managed code)



  • Hi Leute

    Ich versuche krampfhaft auf ein Event, der in einer unmanaged code Klasse ausgelöst wird, in einer Wrapper Klasser auf diesen Event zu reagieren. Bisher ohne Erfolg. Ich verwende C++ VS 2005 Beta 2. Ich habe schon einige Sachen wie
    http://www.codeguru.com/Cpp/Cpp/cpp_managed/interop/article.php/c6867/ probiert. Aber VS 2005 unterstütz laut http://blogs.msdn.com/branbray/ keine mixed code. Kann vielleicht jemand weiterhelfen?

    Hier mein Code

    Unmanaged Code header unmanaged.h:

    __nogc class Unmanaged
    {
    public:

    ...

    __event void OnSomething(void);

    void eventhandler(void)
    {};

    int Dosomething(void);

    ...

    void hookEvent(Unmanaged* p_source)
    {
    __hook(&ASR::OnSomething, p_source , &ASR::eventhandler);
    }

    void unhookEvent(...)
    {
    ...
    }

    ...

    };

    **************************

    Unmanaged Code - Class unmanaged.cpp:

    ...

    int Unmanaged::DoSomething()
    {
    ...

    if(...)
    {
    __raise ASR::OnSomething();
    }
    ...
    }
    ...

    **************************************

    Managed Code header for wrapper class

    #include "unmanaged.h"
    #using <mscorlib.dll>

    __delegate void OnDosomethingMan(void);

    public __gc class Managed : public IDisposable
    {

    private:

    Unmanaged __nogc* m_pUnmanaged;

    public:

    void eventdummy(void)
    {
    };

    Managed();
    ~Managed();
    void Dispose(bool disposing);
    void Dispose();
    ...
    };

    ***********************************

    Managed.cpp

    Managed ::Managed ()
    {
    m_pUnmanaged = new Unmanaged ();

    //m_pUnmanaged->OnDosomething; <- was fange ich damit nun an

    }

    void Managed ::Dispose(bool disposing)
    {...}

    ...



  • ..und kann mir zumindest sagen ob das überhaupt möglich ist? Niemand ? 😞



  • Passt das vielleicht eher zu .net? 😕
    Ich glaube, ich habe hier noch nie was zu managed Code gesehen...

    Guck mal ins .net Forum, ob deine Frage da besser aufgehoben wäre.
    Wenn ja, gib hier Bescheid, ich schieb dich hin, dann musst du nicht nochmal schreiben. 🙂


Anmelden zum Antworten