小编Mic*_*ael的帖子

如何使用X11复制到剪贴板?

使用OS X上的框架,我可以使用以下内容将PNG复制到粘贴板(在C中 - 显然我可以将NSPasteboard与Cocoa一起使用):

#include <ApplicationServices/ApplicationServices.h>

int copyThatThing(void)
{
    PasteboardRef clipboard;
    if (PasteboardCreate(kPasteboardClipboard, &clipboard) != noErr) {
        return -1;
    }

    if (PasteboardClear(clipboard) != noErr) {
        CFRelease(clipboard);
        return -1;
    }

    size_t len;
    char *pngbuf = createMyPNGBuffer(&len); /* Defined somewhere else */
    if (pngbuf == NULL) {
        CFRelease(clipboard);
        return -1;
    }

    CFDataRef data = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault, pngbuf, 
                                         len, kCFAllocatorNull);
    if (data == NULL) {
        CFRelease(clipboard);
        free(pngbuf);
        return -1;
    }

    OSStatus err;
    err = PasteboardPutItemFlavor(clipboard, NULL, kUTTypePNG, data, 0);
    CFRelease(clipboard);
    CFRelease(data);
    free(pngbuf);

    return 0; …
Run Code Online (Sandbox Code Playgroud)

c linux x11 pasteboard copy-paste

8
推荐指数
1
解决办法
4782
查看次数

如何"突破"dispatch_apply()?

有没有办法模拟块中的break语句dispatch_apply()

例如,我见过处理枚举块的每个Cocoa API都有一个"停止"参数:

[array enumerateObjectsUsingBlock:^(id obj, NSUInteger i, BOOL *stop) {
    if ([obj isNotVeryNice]) {
        *stop = YES; // No more enumerating!
    } else {
        NSLog(@"%@ at %zu", obj, i);
    }
}];
Run Code Online (Sandbox Code Playgroud)

GCD有类似的东西吗?

cocoa objective-c break grand-central-dispatch objective-c-blocks

7
推荐指数
2
解决办法
4317
查看次数

如何使用强制(MP3)类型从URL制作QTMovie播放文件?

我正在使用QTKit逐步从URL下载和播放MP3.根据此文档,这是我应该用来完成的代码:

NSURL *mp3URL = [NSURL URLWithString:@"http://foo.com/bar.mp3"];

NSError *error = nil;
QTMovie *sound = [[QTMovie alloc] initWithURL:mp3URL error:&error];
[sound play];
Run Code Online (Sandbox Code Playgroud)

这有效,并且完全符合我的要求 - MP3 URL被懒散地下载并立即开始播放.但是,如果URL没有".mp3"路径扩展名,则会失败:

NSURL *mp3URL = [NSURL URLWithString:@"http://foo.com/bar"];

NSError *error = nil;
QTMovie *sound = [[QTMovie alloc] initWithURL:mp3URL error:&error];
[sound play];
Run Code Online (Sandbox Code Playgroud)

没有给出错误,没有引发异常; 声音的持续时间只是设置为零,没有任何播放.

我找到解决此问题的唯一方法是通过手动加载数据并使用QTDataReference强制类型:

NSURL *mp3URL = [NSURL URLWithString:@"http://foo.com/bar"];
NSData *mp3Data = [NSData dataWithContentsOfURL:mp3URL];

QTDataReference *dataReference = 
    [QTDataReference dataReferenceWithReferenceToData:mp3Data
                                                 name:@"bar.mp3"
                                             MIMEType:nil];
NSError *error = nil;
QTMovie *sound = [[QTMovie alloc] initWithDataReference:dataReference error:&error];
[sound play];
Run Code Online (Sandbox Code Playgroud)

然而,这迫使我在开始播放之前同步完全下载所有MP3,这显然是不可取的.有没有办法解决?

谢谢.

编辑

实际上,路径扩展似乎与它无关; …

cocoa mp3 qtkit objective-c progressive-download

5
推荐指数
1
解决办法
2487
查看次数

将整数映射到整数的理想数据结构?

我不会详细介绍,但我试图实现类似于Boyer-Moore-Horspool算法的算法,只使用十六进制颜色值而不是字符(即,范围更大).

按照维基百科上的例子,我最初有这个:

size_t jump_table[0xFFFFFF + 1];
memset(jump_table, default_value, sizeof(jump_table);
Run Code Online (Sandbox Code Playgroud)

但是,0xFFFFFF显然是一个巨大的数字,这很快导致C出现seg-fault(但不是堆栈溢出,令人失望).

基本上,我需要的是一个有效的关联数组映射整数到整数.我正在考虑使用哈希表,但是对于每个条目都有一个malloc'd结构对我来说似乎有些过分(我也不需要生成哈希值,因为每个键都是一个唯一的整数,并且不能有重复的条目).

有没有人有任何建议的替代方案?我对此过于务实吗?

更新

对于那些感兴趣的人,我最终通过uthash库使用哈希表.

c algorithm data-structures

4
推荐指数
1
解决办法
444
查看次数

使用Python C API命名参数?

如何使用Python C API模拟以下Python函数?

def foo(bar, baz="something or other"):
    print bar, baz
Run Code Online (Sandbox Code Playgroud)

(即,可以通过以下方式调用它:

>>> foo("hello")
hello something or other
>>> foo("hello", baz="world!")
hello world!
>>> foo("hello", "world!")
hello, world!
Run Code Online (Sandbox Code Playgroud)

)

c python named-parameters python-c-api

4
推荐指数
1
解决办法
1828
查看次数