从非托管类成员调用托管类成员函数

时间:2017-01-12 15:04:30

标签: c++ .net visual-c++ c++-cli

我有一个.NET库,它混合了C ++和C ++ / CLI代码。

在这个库中,我有一个用C ++ / CLI编写的托管类,如下所示:

namespace Renderer {
   public ref class StreamingContext
   {
        public: 
           void Error() {

           }
   }

用经典C ++编写的非托管类如下:

    namespace Renderer {
        public class TimeoutHandler
        {
        private:
            int _secondsDelay;
            timespec _lastTime;
        public:
            typedef void (TimeoutHandler::*error)();
            static error ErrorFunc;

            TimeoutHandler(error error, int secondsDelay) {
                ErrorFunc = error;
                _secondsDelay = secondsDelay;
            }

            void Reset() {
                struct timespec ts;
                timespec_get(&ts, TIME_UTC);
                _lastTime = ts;
            }

            bool IsTimeout() {
                struct timespec ts;
                timespec_get(&ts, TIME_UTC);
                return _lastTime.tv_sec + _secondsDelay > ts.tv_sec;
            }

            static int check_interrupt(void * t) {
                TimeoutHandler* ref = static_cast<TimeoutHandler *>(t);
                bool isTimeout = ref->IsTimeout();
                if (isTimeout) {
                    (ref->*ErrorFunc)();
                }

                return t && isTimeout;
            }
        };
    }

因此,我想从非托管TimeoutHandler类的实例(check_interrupt函数内部)调用Error方法。

我已经通过了我的错误方法地址,如下所示:

    Renderer::TimeoutHandler* th = new Renderer::TimeoutHandler(&Renderer::StreamingContext::Error, 5);

我遇到问题因为StreamingContext是一个托管类,所以我无法将StreamingContext成员的地址直接传递给我的非托管类TimeoutHandler。

如何获取托管类方法的引用并在非托管上下文中调用它?

0 个答案:

没有答案