2012-02-04 4 views
1

Mac 응용 프로그램에서 Component Manager을 사용하여 설치된 구성 요소의 목록을 가져옵니다 (내 응용 프로그램은 a video player이고 설치 목록 QuickTime 코덱). 나는 내 응용 프로그램 32 비트를 컴파일 할 때 나는 (927 개 구성 요소가 CountComponents에서 돌아와) 예상대로 작동,Cocoa : Component Manager가 64 비트 응용 프로그램의 모든 구성 요소를 찾지 못함

- (void) findComponents 
{ 
    ComponentDescription desc; 
    desc.componentType = 0; 
    desc.componentSubType = 0; 
    desc.componentManufacturer = 0; 
    desc.componentFlags = 0; 
    desc.componentFlagsMask = 0; 

    long numComps = CountComponents(&desc); 
    NSLog(@"found %ld components", numComps); 

    Component aComponent = 0; 
    while((aComponent = FindNextComponent(aComponent, &desc))) { 
     // Do stuff with this component. 
    } 
} 

:

는이 같은 코드가 있습니다. 그러나 64 비트 컴파일시 CountComponents는 85 개의 구성 요소 만 반환합니다 (어느 구성 요소도 제가 찾고있는 QuickTime 코덱은 아닙니다).

Component Manager 문서는 CountComponents/FindNextComponent에서 64 비트 문제에 관해서는 아무 말도하지 않습니다. (틀림없이 고대의) Apple DTS sample code upon which this code is based은 64 비트 컴파일시 동일한 문제가 있다는 점에 유의할 가치가 있습니다.

내가 잘못하고있는 아이디어가 있습니까? 수동으로 구성 요소를 찾고 'thng'리소스를 파싱하는 데 의존하고 싶지 않습니다.

EDIT : 64 비트 애플리케이션에서 Component Manager는 64 비트 구성 요소 만 나열 할 수 있습니까? 어쩌면이 기능을 32 비트 공유 라이브러리에 내장하고 내 64 비트 응용 프로그램에서 호출 할 수 있습니까?

+1

"* 64 비트 응용 프로그램에서 Component Manager는 64 비트 구성 요소 만 나열 할 수 있습니까? *"그 동작은 * 예상 *입니다. – justin

답변

1

그러나 64 비트 컴파일시 CountComponents는 85 개의 구성 요소 만 반환합니다 (어느 구성 요소도 내가 찾고있는 QuickTime 코덱이 아닙니다).

QuickTime C API를 사용하는 QuickTime 코덱은 32 비트 전용이며 Apple은이 API를 64 비트로 이식하지 않았습니다. 애플리케이션별로 새로운 Objective-C API 인 QTKit을 사용할 수 있습니다. QTKit은 QuickTime X를 사용하여 동영상을 재생하려고합니다. 사용 가능한 적합한 QuickTime X 코덱이 없기 때문에 그렇게 할 수 없다면 QuickTime 7로 돌아가며 이전 QuickTime 구성 요소를 사용할 수 있습니다. 이는 QTKit을 사용하는 개발자에게는 투명합니다.

64 비트 응용 프로그램에서 Component Manager는 64 비트 구성 요소 만 나열 할 수 있습니까?

네, 맞습니다. 동일한 프로세스에서 32 비트와 64 비트 코드를 혼합 할 수는 없으므로 Component Manager가 프로세스에로드 할 수있는 구성 요소로 쿼리를 제한한다는 의미가 있습니다. 32 비트 구성 요소의 경우 32 비트 구성 요소, 64 비트 프로세스 용 64 비트 구성 요소.

아마도이 기능을 32 비트 공유 라이브러리에 내장하고 64 비트 응용 프로그램에서 호출 할 수 있습니까?

위에서 설명한대로 32 비트 동적 라이브러리를 64 비트 프로세스로로드 할 수 없습니다. 별도로 32 비트 도우미 실행 파일을 만들어이를 사용하여 32 비트 구성 요소 목록을 얻습니다. 주 응용 프로그램과 도우미 실행 파일간에 구성 요소를 나열하는 소스 코드를 공유 할 수 있지만 별도의 실행 파일이어야합니다.

실제로 QuickTime X를 사용하여 32 비트 QuickTime 구성 요소가 필요한 경우이 동작을 볼 수 있습니다. 32 비트 QTKitServer 프로세스가 생성되어 QuickTime 구성 요소를 사용하여 동영상을 디코딩하고 결과를 다시 64 비트 QuickTime X로 보내십시오. John Siracusa describes this in his Snow Leopard Review. Adopting QuickTime X for Playback section in QTKit Application Programming Guide을 살펴볼 수도 있습니다.

+0

감사합니다. 별도의 32 비트 실행 파일은 내가 향하고있는 경로입니다. 재생을 위해 QTKit을 사용하고 있는데, 컴포넌트 레벨에서 이들에 액세스하려는 유일한 이유는 설치된 코덱을 확인하는 것입니다. – zpasternack

+0

http://www.apple.com/pr/library/2012/02/16Apple-Releases-OS-X-Mountain-Lion-Developer-Preview-with-Over-100-New-Features.html에 따라 Mountain Lion과 함께 "새로운 비디오 API는 저급 QuickTime API를위한 현대적인 64 비트 대체품을 제공합니다". –