- 我在我的目标 c 项目中使用 c++ 库。
- 我集成了 c++ 库并实现了 .mm 文件以桥接 c++ 和目标 c。
我可以使用这个 .mm 桥从我的目标 c 中成功调用 c++ 函数。
问题是给定的 c++ 库中的方法没有返回任何内容,即 Void。例如 void login( const char* email, const char* password);
这个 c++ 库实现了回调函数来知道这个登录方法的结果。
例子:
class DemoApp : public XClass
{
int urandomfd;
public:
uint32_t dstime(void);
FileAccess* newfile();
void request_error(MegaClient*, error);
void login_result(MegaClient*, error);
void users_updated(MegaClient*, User**, int);
void nodes_updated(MegaClient*, Node**, int);
int prepare_download(MegaClient*, Node*);
void share_result(MegaClient*, int, error);
void account_details(MegaClient*, AccountDetails*, int, int, int, int, int, int);
void topen_result(MegaClient*, int, error);
void topen_result(MegaClient*, int, string*, const char*, int);
void transfer_update(MegaClient*, int, off_t, off_t, uint32_t);
void transfer_error(MegaClient*, int, int, int);
void transfer_failed(MegaClient*, int, error);
void transfer_failed(MegaClient*, int, string&, error);
void transfer_limit(MegaClient*, int);
void transfer_complete(MegaClient*, int, chunkmac_map*, const char*);
void transfer_complete(MegaClient*, int, const byte*, const byte*, SymmCipher*);
void changepw_result(MegaClient*, error);
void reload(MegaClient*, const char*);
void notify_retry(MegaClient*, int);
void debug_log(MegaClient*, const char*);
DemoApp();
};
所以现在我关心的是我应该如何以及何时在我的目标 C 库中调用这些 CALLBACK 函数,在我看来它们是在 c++ 库中内部调用的。
这是我的wrapper.mm文件,包装了c++方法,需要在objective c中调用。
-(无效)WrapLogin:(NSString *)电子邮件:(NSString *)密码{
self.wrappedModelAccessMega->Login([email UTF8String], [pwd UTF8String]); //没有返回,因为来自 c++ 库的登录 mfunction 不返回任何内容,即 void
}
我一直在研究它,并且已经努力将这个库集成到我的目标 C 库中,现在由于这些回调函数,我被困住了。请展示我应该如何使用 c++ 的回调函数、包装它并调用我的目标 c 以获取/知道结果/返回我的登录函数的小例子,这对我来说非常有用。