У меня есть класс С++, которому нужно вызвать объектный метод c, используя указатель на этот метод. Этот метод возвращает значение void и принимает аргумент типа «статус», где статус — это простое целочисленное перечисление.
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 таким же образом, он проходит и получает правильное значение.
Что я делаю неправильно? Вы не можете вызвать объектный метод c таким образом?