해당 메서드에 대한 포인터를 사용하여 objective c 메서드를 호출해야하는 C++ 클래스가 있습니다. 이 메소드는 void를 리턴하고 status가 단순한 정수 enum 인 'status'유형의 인수를 취합니다.C++ 메서드에서 함수 포인터를 사용하여 objective c 메서드 호출
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 클래스에서 메서드를 호출하려고하면 올바른 값을 전달하고 수신합니다.
내가 뭘 잘못하고 있니? 이런 객관적인 방법을 호출 할 수 있습니까?
포스트 상태 정의, 나는 추측하지만 참조하여 상태를 전달하려고하고 있습니다 – makc
게시물에 상태 정의를 추가했습니다. 또한, 나는 그것을 참조로 전달하려고 시도했지만 그 중 하나가 작동하지 않습니다. 나는 그와 같은 문제도 가지고 있었다. – halfwaythru
@halfwaythru 함수 프로토 타입이 잘못되었습니다. 내 대답을 참조하십시오. –