C++ 转换为C++;目标C的语法
我的背景是C/C++/C#C++ 转换为C++;目标C的语法,c++,objective-c,callback,pjsip,C++,Objective C,Callback,Pjsip,我的背景是C/C++/C# 我在XCODE项目中使用C++库(具体地说,库是PJSIP)。要使用库,我必须将几个回调连接到我的代码,如下所示: SipTest.m 我试图在Objject C中搜索委托,但我找不到类似的情况,其中回调已经在C++中实现了,并且您想用Objto-C语法使用它。 谢谢在这种情况下,您需要使用选择器 +(void) on_reg_state:(pjsua_acc_id) acc_id { // Do work } +(void) Init {
我在XCODE项目中使用C++库(具体地说,库是PJSIP)。要使用库,我必须将几个回调连接到我的代码,如下所示:
SipTest.m我试图在Objject C中搜索委托,但我找不到类似的情况,其中回调已经在C++中实现了,并且您想用Objto-C语法使用它。
谢谢在这种情况下,您需要使用选择器
+(void) on_reg_state:(pjsua_acc_id) acc_id
{
// Do work
}
+(void) Init
{
pjsua_config cfg;
psjua_config_default(&cfg);
cfg.cb.on_regstate_selector = @selector(on_reg_state:);
cfg.cb.target = self; //Self here is the class object in your 'Init' method, which is poorly named.
//Use this like [cfg.cb.target performSelector:cfg.cb.on_regstate_selector withObject:...etc]
}
首先,根本不需要转换任何东西。从Objut-C.</P>调用C++库是完全正确的。 其次,导致编译器错误的原因是,您试图将一个方法粘贴到应该有函数指针的位置。不能使用
&
运算符从Objective-C方法中生成函数指针。只需将保持在\u reg\u state()
函数上,并像以前一样使用它,这也是在Apple基于C的框架中执行回调的方式(一旦您超越了高级别Objective-C API提供的功能,您就需要这样做)
第三,您的
+(void)Init
方法似乎有点奇怪。我强烈建议您编写一个名为Init
(大写)的方法。如果要编写初始值设定项,它应该是-(id)init
,即小写并返回id
。不要忘记调用其超类的指定初始值设定项,检查其返回值,将其分配给self,并在init
方法末尾返回它(如果您不熟悉,请参阅中的实现初始值设定项)。如果您的方法不是初始值设定项,请使用其他名称,例如,-(void)createConfig
我在cfg中没有“on\u regstate\u selector”和“cb.target”?我同意Init命名。这个想法是你必须添加一个。目标+选择器是常见的范例。
+(void) on_reg_state:(pjsua_acc_id) acc_id
{
// Do work
}
+(void) Init
{
pjsua_config cfg;
psjua_config_default(&cfg);
cfg.cb.on_regstate = &on_reg_state; // ***** this is causing compile error
// I tried [CLASS NAME on_reg_state] and i get runtime error
}
+(void) on_reg_state:(pjsua_acc_id) acc_id
{
// Do work
}
+(void) Init
{
pjsua_config cfg;
psjua_config_default(&cfg);
cfg.cb.on_regstate_selector = @selector(on_reg_state:);
cfg.cb.target = self; //Self here is the class object in your 'Init' method, which is poorly named.
//Use this like [cfg.cb.target performSelector:cfg.cb.on_regstate_selector withObject:...etc]
}