Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos Cocoa:组件管理器在64位应用程序中找不到所有组件_Macos_Cocoa_64 Bit_Quicktime_Macos Carbon - Fatal编程技术网

Macos Cocoa:组件管理器在64位应用程序中找不到所有组件

Macos Cocoa:组件管理器在64位应用程序中找不到所有组件,macos,cocoa,64-bit,quicktime,macos-carbon,Macos,Cocoa,64 Bit,Quicktime,Macos Carbon,我正在Mac应用程序中使用以获取已安装组件的列表(我的应用程序是,我想获取已安装QuickTime编解码器的列表) 我有这样的代码: - (void) findComponents { ComponentDescription desc; desc.componentType = 0; desc.componentSubType = 0; desc.componentManufacturer = 0; desc.componentFlags = 0;

我正在Mac应用程序中使用以获取已安装组件的列表(我的应用程序是,我想获取已安装QuickTime编解码器的列表)

我有这样的代码:

- (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.
    }
}
当我编译我的32位应用程序时,它就像我期望的那样工作(927个组件从CountComponents返回)。然而,当编译64位时,CountComponents只返回85个组件(其中没有一个是我正在寻找的QuickTime编解码器)

Component Manager文档没有提到CountComponents/FindNext组件的64位问题。值得注意的是,当编译64位时(公认为古老的)也有同样的问题

知道我做错了什么吗?我不想求助于手动查找组件和解析“thng”资源

编辑:在64位应用程序中,组件管理器是否可能只列出64位组件?在这种情况下,也许可以将此功能内置到32位共享库中,并从我的64位应用程序调用

然而,当编译64位时,CountComponents只返回85个组件(其中没有一个是我正在寻找的QuickTime编解码器)

使用QuickTime C API的QuickTime编解码器仅为32位,苹果尚未将该API移植到64位。注意,在应用程序方面,您可以使用QTKit,即新的Objective-CAPI。QTKit尝试使用QuickTime X播放电影;如果因为没有合适的QuickTime X编解码器可用而无法使用,则可以使用QuickTime 7,而QuickTime 7又可以使用旧的QuickTime组件。这对于使用QTKit的开发人员来说是透明的

在64位应用程序中,Component Manager是否可能只列出64位组件

是的,没错。请注意,不可能在同一进程中混合使用32位和64位代码,因此组件管理器将查询限制为可加载到进程中的组件是有意义的:32位进程使用32位组件,64位进程使用64位组件

在这种情况下,也许可以将此功能内置到32位共享库中,并从我的64位应用程序调用

如上所述,您将无法将32位动态库加载到64位进程上。您可以做的是创建一个单独的32位帮助程序可执行文件,并使用它获取32位组件的列表。您可以在主应用程序和助手可执行文件之间共享列出组件的源代码,但它们必须是单独的可执行文件

事实上,如果使用QuickTime X播放需要32位QuickTime组件的电影,您可以看到这一点:为了使用QuickTime组件解码电影并将结果发送回64位QuickTime X,会生成一个32位QTKitServer进程。您可能还想看一下

然而,当编译64位时,CountComponents只返回85个组件(其中没有一个是我正在寻找的QuickTime编解码器)

使用QuickTime C API的QuickTime编解码器仅为32位,苹果尚未将该API移植到64位。注意,在应用程序方面,您可以使用QTKit,即新的Objective-CAPI。QTKit尝试使用QuickTime X播放电影;如果因为没有合适的QuickTime X编解码器可用而无法使用,则可以使用QuickTime 7,而QuickTime 7又可以使用旧的QuickTime组件。这对于使用QTKit的开发人员来说是透明的

在64位应用程序中,Component Manager是否可能只列出64位组件

是的,没错。请注意,不可能在同一进程中混合使用32位和64位代码,因此组件管理器将查询限制为可加载到进程中的组件是有意义的:32位进程使用32位组件,64位进程使用64位组件

在这种情况下,也许可以将此功能内置到32位共享库中,并从我的64位应用程序调用

如上所述,您将无法将32位动态库加载到64位进程上。您可以做的是创建一个单独的32位帮助程序可执行文件,并使用它获取32位组件的列表。您可以在主应用程序和助手可执行文件之间共享列出组件的源代码,但它们必须是单独的可执行文件


事实上,如果使用QuickTime X播放需要32位QuickTime组件的电影,您可以看到这一点:为了使用QuickTime组件解码电影并将结果发送回64位QuickTime X,会生成一个32位QTKitServer进程。您可能还想看看。

“是否可能在64位应用程序中,组件管理器仅列出64位组件?”这是我所期望的行为。“是否可能在64位应用程序中,组件管理器仅列出64位组件?”这是我所期望的行为。谢谢,一个单独的32位可执行文件就是我要走的路径。我正在使用QTKit进行播放,我想在组件级别访问这些组件的唯一原因是查看安装了哪些编解码器。请注意,根据Mountain Lion的说法,“新的视频API为低级QuickTime API提供了现代的64位替代品”。谢谢,我要走的路是一个单独的32位可执行文件。我正在使用QTKit进行播放,我想在组件级别访问这些组件的唯一原因是查看安装了哪些编解码器。请注意,根据Mountain Lion的说法,“新的视频API提供了低级别QuickTime API的现代64位替代品”。