在纯 C++ 中创建一个 Objective-C 块
Create an Objective-C Block in plain C++
我想用 CGDisplayStreamCreateWithDispatchQueue
c 函数创建一个 CGDisplayStream
,它需要一个 CGDisplayStreamFrameAvailableHandler
作为参数。
CGDisplayStreamFrameAvailableHandler
是一个 objective-c 块。
我尝试使用 C++ lambda,但这不起作用:
No viable conversion from '(lambda at ###RECTRACTED###)' to 'CGDisplayStreamFrameAvailableHandler' (aka 'void (^)(CGDisplayStreamFrameStatus, uint64_t, IOSurfaceRef _Nullable, CGDisplayStreamUpdateRef _Nullable)')
我发现:Objective-C Blocks in C
但这并没有真正的帮助,因为他们没有解释在普通 c 或 c++ 中创建 objective-c 块需要什么。
如何创建可以传递给 CGDisplayStreamCreateWithDispatchQueue 的有效对象?
这对我有用:
CGDisplayStreamFrameAvailableHandler handler = ^void(CGDisplayStreamFrameStatus status, uint64_t timestamp, IOSurfaceRef frameSurface, CGDisplayStreamUpdateRef updateRef) {
std::cout << "Update" << std::endl;
};
感谢@molbdnilo 的帮助。
我想用 CGDisplayStreamCreateWithDispatchQueue
c 函数创建一个 CGDisplayStream
,它需要一个 CGDisplayStreamFrameAvailableHandler
作为参数。
CGDisplayStreamFrameAvailableHandler
是一个 objective-c 块。
我尝试使用 C++ lambda,但这不起作用:
No viable conversion from '(lambda at ###RECTRACTED###)' to 'CGDisplayStreamFrameAvailableHandler' (aka 'void (^)(CGDisplayStreamFrameStatus, uint64_t, IOSurfaceRef _Nullable, CGDisplayStreamUpdateRef _Nullable)')
我发现:Objective-C Blocks in C 但这并没有真正的帮助,因为他们没有解释在普通 c 或 c++ 中创建 objective-c 块需要什么。
如何创建可以传递给 CGDisplayStreamCreateWithDispatchQueue 的有效对象?
这对我有用:
CGDisplayStreamFrameAvailableHandler handler = ^void(CGDisplayStreamFrameStatus status, uint64_t timestamp, IOSurfaceRef frameSurface, CGDisplayStreamUpdateRef updateRef) {
std::cout << "Update" << std::endl;
};
感谢@molbdnilo 的帮助。