gpt4 book ai didi

c++ - 从 C++ 类方法调用 Objective-C 方法

转载 作者:太空宇宙 更新时间:2023-11-04 11:25:14 25 4
gpt4 key购买 nike

是否可以从 C++ 类方法调用 Objective-C 方法?我知道这在一定程度上得到了回答,但没有一个接受的答案似乎对我有用,因为我在尝试使用 Objective-C 实例变量(指向自身的指针)调用方法时得到“使用未声明的标识符” .

@interface RTSPHandler : NSObject {   
id thisObject;
}

实现:

-(int)startRTSP:(NSString *)url {

thisObject = self;
// start rtsp code
}

void DummySink::afterGettingFrame(unsigned frameSize, unsigned numTruncatedBytes,
struct timeval presentationTime, unsigned ) {

[thisObject receivedRTSPFrame:fReceiveBuffer];

}

-(void)receivedRTSPFrame:(NSMutableData* )data {

// decode frame..

}

错误:使用了未声明的标识符“thisObject”

最佳答案

尝试将 thisObject 声明为静态变量,如下所示

static id thisObject;
@implementation RTSPHandler
//...
@end

更新

好的。现在我看到我的回答很搞笑。让我们完成任务并使解决方案更合适。

将有两个独立的类,具有独立的接口(interface)和实现部分。假设名为 OCObjectiveClass(Objective-c 类)和 DummySink(C++ 类)的 Objective-C 类。每个 DummySink 实例必须有一个 OCObjectiveClass 对象作为 c++ 类成员。

这是 OCObjectiveClass 的接口(interface)部分(带有“.h”扩展名):

@interface OCObjectiveClass : NSObject
//...
- (void)receivedRTSPFrame:(void *)frame; // I don't know what is the frame's type and left it with a simple pointer
//...
@end

这是 DummySink 的接口(interface)部分(也带有“.h”扩展名):

#import "OCObjectiveClass.h" // include objective-c class headers
class DummySink
{
OCObjectiveClass *delegate; // reference to some instance
//...
void AfterGettingFrame(unsigned frameSize, unsigned numTruncatedBytes,struct timeval presentationTime, unsigned);
//...
}

AfterGettingFrame 功能实现必须在DummySink 类实现部分(不是“.cpp”扩展名,它必须是“.mm”才能与 objective-c 类一起工作并且方法)。

void DummySink::afterGettingFrame(unsigned frameSize, unsigned numTruncatedBytes,
struct timeval presentationTime, unsigned ) {

[delegate receivedRTSPFrame:fReceiveBuffer];

}

不要忘记设置 delegate 值。

- (void)someMethod
{
OCObjectiveClass *thisObject;
// initialize this object
DummySink sink;
sink.delegate=thisObject;
sink.DoWork();
}

关于c++ - 从 C++ 类方法调用 Objective-C 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26908260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com