문제

나는 기억력이있다.

C ++ 라이브러리 (Eyescale에서 이퀄라이저)를 가지고 있으며 Traversal Visitor 패턴을 사용하여 클래스에 새로운 기능을 추가 할 수 있습니다.

마침내 어떻게 작동하는지 알아 냈고, 객체 중 하나에서 속성을 반환하는 방문객이 있습니다. (내가 어떻게 할당되었는지 모르기 때문에).

그래서.

내 작은 코드는 다음을 수행합니다.

VisitorResult AGLContextVisitor::visit( Channel* channel ) 
{ 
  // Search through Nodes, Pipes until we get to the right window. 
  // Add some code to make sure we find the right one? 

  // Not executing the following code as C++ in gdb? 
  eq::Window* w = channel->getWindow(); 
  OSWindow* osw = w->getOSWindow(); 
  AGLWindow* aw = (AGLWindow *)osw; 
  AGLContext agl_ctx = aw->getAGLContext(); 
  this->setContext(agl_ctx); 

  return TRAVERSE_PRUNE; 
} 

여기 문제가 있습니다.

eq::Window* w = channel->getWindow(); 
(gdb) print w 
0x0 

그러나 내가 이것을한다면 :

(gdb) set objc-non-blocking-mode off 
(gdb) print w=channel->getWindow() 
0x300effb9 

// 정직한 메모리 위치로 Xcode의 디버거 창에서 확인 된대로 W를 설정합니다.

OSW에 대해서도 마찬가지입니다.

나는 그것을 얻지 못한다. 왜 (GDB)에서 무언가가 작동하지만 코드에서는 작동하지 않습니까?

파일은 완전히 CPP 파일이지만 차단을 끄야하므로 OBJC ++에서 실행중인 것 같습니다.

돕다!? C ++ 또는 OBJ-C를 사용하여 메모리 관리 기본 사항이없는 것 같습니다.

편집하다

채널-> getwindow ()는 다음을 수행해야합니다.

/** @return the parent window. @version 1.0 */
Window* getWindow() { return _window; }

C ++에서만 실행하면 코드가 잘 실행됩니다.

편집하다

아니요 ... 플러그인으로 실행하는 데 지쳤으므로 간단한 독립형 프로그램을 만들려고했습니다. 디버그가 지저분합니다.

그리고 아니요, C ++ 프로그램에서도 실행되지 않습니다. 그래서 나는 내가 틀린 일에 대해 정말로 상실하고 있습니다.

감사,

- 스티븐 푸르 라니

도움이 되었습니까?

해결책

나는 이것을 대답하고 닫아야한다고 생각합니다.

내가 사용하고 있던 방법은 완전히 스레드-미사였다. 나는 실, 탄소/코코아, C ++/OBJC를 가로 질러 전화했다.

말할 것도없이, 그렇게하지 마십시오! 나는 어려운 방법을 배웠다.

-스테페

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top