我有一个.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。
如何获取托管类方法的引用并在非托管上下文中调用它?