2010-02-02 6 views
0

WOsclib에 약간 문제가 있습니다. 특히 라이브러리에서는 콜백 함수가 더 많습니다. (가) 내가Objective C in C++ - 범위를 벗어남

void TheOscStartMethod::Method(
          const WOscMessage *message, 
          const WOscTimeTag& when, 
          const TheNetReturnAddress* networkReturnAddress) 
{ 
    std::cout << "Got the start signal"; 
    start.alpha = 1.0; 
} 

시작과 같은 몇 가지 콜백 메소드를 넣어야 할 특정 OSC 명령을 듣고 함께 IBOutlet있는 UIImageView이다.

하지만 컴파일러는 나에게 그 시작은 범위를 벗어난다고 말합니다. obj-c 코드로 시작하려고한다면 꼭 그렇게해야합니다.

Objective C Objects를 C 코드로 가져 오거나 적어도 objective-c 함수를 호출하려면 어떻게해야합니까?

+1

어디에서 시작 했습니까? – MrMage

답변

0

솔루션 :이 그것을 할 수있는 최선의 방법 인 경우

내가 모르겠지만, 작동 .

빈 c 객체가 있어야하며, 나중에 우리가 액세스하고자하는 모든 것을 보유하고있는 우리의 객관적인 객체가 될 것입니다.

static gsSearchForIp* delegate = NULL; 

우리는 목표 C 객체를

void setCallbackDelegate(gsSearchForIp* del) 
{ 
    delegate = del; 
} 

을 설정하는 함수를 정의하고 다음을 호출해야합니다.

setCallbackDelegate(self); 

지금 난 내 C++ 방법에 [delegate methodName:firstPara]와 방법을 호출 할 수 있습니다 (I는 initWithFrame 방법이라고 불렀다). 이 함수에서는 gsSearchForIp 클래스에서 필요한 모든 요소에 액세스 할 수 있습니다.

1

가 확장 .mm와 객관적인 C++ 파일 그런 다음 같은 코드에서 객체 C 및 C++ 객체를 호출 할 수있는 파일을 확인 감사드립니다.

엑스 코드 파일 확장자에서 올바른 컴파일러를 호출합니다

하지 않는 것이 C++ 및 목표 C (즉, 컴파일 명령에 -x 목표 - C++ 추가) 다른 언어하며 서로를 이해하지 못하는 것은 이동하기 때문에 객체 데이터를 C 유형으로 변환해야합니다. void, char int와 그것들에 대한 포인터.

+0

흠, 이미 파일 확장자가 아니라 정보 패널에 있습니다. 바로 지금 이렇게 보입니다. http://grab.by/28Ld – Philip

+0

아, 그러면이 문제는 아닌 것으로 생각합니다. 우리는 시작 클래스의 헤더를 볼 필요가 있습니까? – Mark

+0

내가 말했듯이'start'는 UIViewImage입니다. 더 좋은 예를 선택해야합니다. 'start'는 메소드가 될 수 있습니다. '[self methodName]'도 작동하지 않습니다. – Philip

1

start은 Objective-C 객체에 속하는 인스턴스 변수이며 C++ 객체에서 이름을 작성하여 액세스하려고하는 것처럼 들립니다. 이 경우, 왜 작동하지 않는지 분명해야합니다 : C++ 객체는 start에 대해 아무것도 모릅니다. 해결책은 어떻게 든 C++ 객체에 start을 소유 한 Objective-C 객체에 대한 참조를 제공하는 것입니다.

+0

어떻게 이런 식으로 작동하는지 알 수 있습니다. – Philip

+0

제 설명은 가능한 한 구체적이었습니다. . 어떻게하는지에 대한 일반적인 대답은 없습니다. 코드가 필요한 데이터에 대해 알 수 있도록 프로그램을 구조화해야합니다. 이 프로그램 구조가 구체적으로 보이는 것은 우리가 여기에없는 프로그램의 특성에 달려 있습니다. – Chuck

+0

Uff, 이제 나는 지식을 전혀 가지고 있지 않은 것을 파고 들었다. 그러나 시도해 봅시다. 일부 단추 및 레이블을 처리하는 일반 AppDelegate가 있습니다. 그게 잘 작동 해. 어려운 부분은 내가 사용하고있는 OSC 라이브러리입니다. 그 중 하나는 C++로 작성되었지만 플랫폼에 독립적입니다. 나는 그것을 구현하고 그것을 작동합니다. 나는 네트워크를 통해 수신 osc 신호를 보낼 수 있습니다. 자, 만약 내가 osc 신호, 특정 메서드, C++ 메서드를 호출합니다. 그게 내 문제 시작이었다. 그 방법을 사용하여 인터페이스를 변경하고 싶습니다. 그게 내 사건을 설명하는 데 도움이되는지 모르겠다. 어쨌든 고마워요 :) – Philip

0

다른 개체에서 사용할 수있는 시작 개체를 만들어야합니다.

사용할 수있는 부분을 전달하면 두 코드베이스에 사용할 API를 만들 수 있습니다. 다른 옵션은 모든 당신이 다양한 개체를 사용하고자하는 방법을 정확하게에 따라,뿐만 아니라있다