免责声明我是一名具有Java经验的PHP程序员,并且涉足过Obj-C / C ++ / C.
我正在尝试在Obj-C应用程序中使用IB SDK。我已经掌握了.mm与.cpp vs .m文件的汇编。
IB API具有“发送和接收”模式,其中类EClientSocketBase
将数据发送到API,第二个类EWrapper
在单独的线程中从API接收数据。
我有一个obj-c包装类,CppSend
,继承自EClientSocketBase
类,ObjCSend
,用于将数据发送到api。从obj-c调用c ++类似乎不是问题。但是,当我尝试反向时,我遇到了一个问题。我不知道如何注入一个类,比如ObjCRecieve
来处理EWrapper
中的回调。
我的objc发件人,看起来像这样:
// This class sends messages to CppSend
@interface ObjCSend
@property (atomic) CppSend* client;
...
@end
我的cpp发件人看起来像这样:
#import "CppReceive.h"
// This class sends messages to the IB Api.
class CppSend: public EClientSocketBase {
public:
CppReceive * incomingFromAPI;
...
}
我的cpp接收器看起来像这样:
#import "ObjCReceive.h"
// This class receives messages from the IB API, containing
// data relevant to the messages sent in CppSend
class CppReceive: public EWrapper {
public:
ObjCRecieve *outgoingToGUI;
void setObjCReceive(ObjReceive * delegate);
...
}
这是我为Obj-C接收器所做的事情:
// This class should receive messages from CppReceive, containing
// data relevant to the messages sent in CppSend
@interface ObjCReceive
- (void)callbackHandler;
@end
我的问题出在CppReceive->delegate
。我收到编译错误"Unknown type name 'ObjCReceive'"
。我假设这是因为c ++头文件无法正确引用obj-c接口作为类型。
我如何创建一个Obj-C类,它可以在C ++类中解析和编译适当的类型?
编辑:数据流将是这样的
------------
| ObjCSend |
------------
|
V
-----------
| CppSend |
-----------
|
V
--------
( IB API )
--------
|
V
--------------
| CppReceive |
--------------
|
V
--------------
| ObjReceive |
--------------
答案 0 :(得分:0)
您不能在C / C ++程序中使用Objective-C对象或构造。
为了能够使用Objective-C对象,您可以使用pimpl-idiom(指向实现的指针)。
例如,在您的情况下,将有一个类CppSendImpl
,CppSend
将有它的指针。
这个CppSendImpl
可以在Objective-C ++(而不是Objective-C)中实现,它实现了需要Objective-C的代码,并且可以与你想要的Objective-C对象进行交互。
在这里,您可以使用Objective-C构造。但是,如果您的CppSend
也适用于C ++客户端,则不能公开或使用任何Objective-C构造外部实现类。