gpt4 book ai didi

c++ - 使用来自 C++ 方法的函数指针调用 Objective-C 方法

转载 作者:太空狗 更新时间:2023-10-29 20:27:24 24 4
gpt4 key购买 nike

我有一个 c++ 类需要使用指向该方法的指针来调用 objective-c 方法。此方法返回 void 并采用“status”类型的参数,其中 status 是一个简单的整数枚举。

 enum status
{
status_valid = 0,
status_invalid,
status_unknown
};

我有这样设置的指向 obj-c 方法的指针。指向该方法的指针也被传递给 c++ 类和

typedef void (*FuncPtr) (status);
FuncPtr myObjCSelectorPointer = (void (*)(status))[self methodForSelector:@selector(statusChanged: )];
cppClassInstance->setFuncPointer(myObjCSelectorPointer)

myObjCSelectorPointer 像这样被 cppClass 保留:

void cppClass::setFuncPointer(FunctPtr *ptr)
{
this->funcPtr = ptr;
}

现在在别的地方,当我尝试调用这个指针指向的方法时,像这样:

status s;
funcPtr(s);

该方法被正确调用,但传递给该方法的值丢失了。 obj-c 方法接收一个完全随机的值。当我尝试使用相同的方式调用 cpp 类中的方法时,它传递并接收了正确的值。

我做错了什么?你不能像这样调用 objective c 方法吗?

最佳答案

问题在于 Objective-C 方法的函数签名并不像您想象的那么简单。

为了使面向对象的编程成为可能,Objective-C 方法采用两个隐式参数:id self、SEL _cmd、调用对象和发送的选择器——这些都需要传递。您将需要获取一个对象来调用该方法,并且您还应该存储选择器。然后,将您的函数类型定义更改为正确的定义:

typedef void (*FuncPtr) (id, SEL, status);

待读:[1] , [2] (靠近 typedef id (*IMP)(id, SEL, ...) 部分)

关于c++ - 使用来自 C++ 方法的函数指针调用 Objective-C 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16550384/

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