gpt4 book ai didi

c++ - 是否可以在没有 NSString 的情况下使用 FSEventStreamCreate

转载 作者:行者123 更新时间:2023-11-28 07:34:35 40 4
gpt4 key购买 nike

我的项目不是 arc 或 cocoa,所以我不想在我的代码中使用 NSString,但它似乎不起作用。Xcode 显示 “错误:(CFStringGetTypeID() != CFGetTypeID(cfStringRef)) (i = 0)”。我应该如何创建 CFString?

代码如下:

const char *path = m_directory.AsCharPtr();

CFStringRef directory = CFStringCreateWithCString(kCFAllocatorDefault,path,kCFStringEncodingUTF8);
CFArrayRef pathsToWatch = CFArrayCreate(kCFAllocatorMalloc, (const void **)directory, 1, NULL);

void *appPointer = this;
FSEventStreamContext context = {0, appPointer, NULL, NULL, NULL};
FSEventStreamRef stream;
CFAbsoluteTime latency = 1.0; /* Latency in seconds */

/* Create the stream, passing in a callback */
stream = FSEventStreamCreate(NULL, &fsevents_callback,
&context,
pathsToWatch,
kFSEventStreamEventIdSinceNow, /* Or a previous event ID */
latency,
kFSEventStreamCreateFlagFileEvents /* Flags explained in reference */
);

最佳答案

CFArrayCreate() 需要一个数组,其元素是任意指针,因此 void **。然而,在:

CFArrayCreate(kCFAllocatorMalloc, (const void **)directory, 1, NULL);

您传递的是单个元素而不是数组。请注意,由于该函数需要一个数组,因此它取消引用第二个参数中的地址,偏移它以迭代数组。请记住 array[i] 等同于 *(array + i);特别地,array[0] 等同于 *array

一般的解决方案是创建一个数组并将其传递给函数,如下所示:

const void *directories[] = {directory};
CFArrayCreate(kCFAllocatorMalloc, directories, 1, NULL);

但是由于数组只有一个元素,你也可以这样写:

CFArrayCreate(kCFAllocatorMalloc, (const void **)&directory, 1, NULL);

关于c++ - 是否可以在没有 NSString 的情况下使用 FSEventStreamCreate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16998069/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com