用不推荐的64位代码替换CMNewProfileSearch

时间:2009-05-05 01:42:31

标签: cocoa macos macos-carbon

我现有的代码使用CMNewProfileSearch查找然后迭代系统上的颜色配置文件获取其名称和完整路径。不幸的是,在Mac OS X 10.5中不推荐CMNewProfileSearch,在编译64位应用程序时也不可用。{/ p>

在阅读ColorSync Manager 2.5参考时,似乎迭代已安装的颜色配置文件的新方法是使用CMIterateColorSyncFolder功能。

  1. 这是真的吗?
  2. 是否有可可方式来做我想要的事情呢?
  3. 有人有任何示例代码吗?
  4. 感谢。

1 个答案:

答案 0 :(得分:1)

  1. 是。如您所示,ColorSync Manager Reference说明如下:

    CMNewProfileSearch功能未充分利用优化的配置文件 从ColorSync 2.5版开始搜索可用。使用CMIterateColorSyncFolder 代替。

  2. CMIterateColorSyncFolder是执行此操作的官方方式。此外,它也是优化的方式。

  3. 来自Apple's ImageApp sample code

  4. 编辑:我修改了代码示例以删除NewCMProfileIterateUPPDisposeCMProfileIterateUPP

    
        // Callback routine with a description of a profile that is 
        // called during an iteration through the available profiles.
        //
        static OSErr profileIterate (CMProfileIterateData *info, void *refCon)
        {
            NSMutableArray* array = (NSMutableArray*) refCon;
    
            Profile* prof = [Profile profileWithIterateData:info];
            if (prof)
                [array addObject:prof];
    
            return noErr;
        }
    
        // return an array of all profiles
        //
        + (NSArray*) arrayOfAllProfiles
        {
            NSMutableArray* profs=[[NSMutableArray arrayWithCapacity:0] retain];
            CMIterateColorSyncFolder(profileIterate, NULL, 0L, profs);
            return (NSArray*)profs;
        }
    

    事实证明,不需要NewCMProfileIterateUPPDisposeCMProfileIterateUPP,所以就我所知,它们并没有被任何东西取代。相反,您可以使用与上面的profileIterate匹配的签名定义回调函数。然后,您可以直接将回调函数传递给CMIterateColorSyncFolder

    我在Mac OS X 10.5上测试了ImageApp中的更改,它按预期工作。