2015-01-12 7 views
0

따라서 CTypes Im을 사용하면 아래 코드를 변환 할 수 있습니다. 우리는 그것이 usngiend 문자 여기를 참조 Ctypes 문자를 예상하지만 unsigned int (OSX)로 정의 된 OSType을 설정하는 방법

FourCharCode = ctypes.c_uint32 
OSType = FourCharCode 
QTPropertyClass = OSType 

으로 그것은 OSType를 사용 OSTYPE이 dfined된다. 그러나이 c_uint32 유형을 전자 않을 것 'MACS'에 변수를 설정, 그래서하는 ctypes에

const OSType kFinderSig = 'MACS'; 

로 정의 아래 우리는 코드에서 볼 수 있지만, 어떤 문자 것인가?

알려 주시기 바랍니다.

감사

https://stackoverflow.com/a/8895297/1828637

OSStatus SendFinderSyncEvent(const FSRef* inObjectRef) 
{ 
    AppleEvent theEvent = { typeNull, NULL }; 
    AppleEvent replyEvent = { typeNull, NULL }; 
    AliasHandle itemAlias = NULL; 
    const OSType kFinderSig = 'MACS'; 

    OSStatus err = FSNewAliasMinimal(inObjectRef, &itemAlias); 
    if (err == noErr) 
    { 
     err = AEBuildAppleEvent(kAEFinderSuite, kAESync, typeApplSignature, 
      &kFinderSig, sizeof(OSType), kAutoGenerateReturnID, 
      kAnyTransactionID, &theEvent, NULL, "'----':alis(@@)", itemAlias); 

     if (err == noErr) 
     { 
      err = AESendMessage(&theEvent, &replyEvent, kAENoReply, 
       kAEDefaultTimeout); 

      AEDisposeDesc(&replyEvent); 
      AEDisposeDesc(&theEvent); 
     } 

     DisposeHandle((Handle)itemAlias); 
    } 

    return err; 
} 

답변

2
const OSType kFinderSig = 'MACS'; 

'MACS'는 문자 상수가 아닌 문자열! 이 코드는 multi-character character constants에 대해 (의심스러운) GCC 확장자를 사용하고 있습니다. 단지 하드 코드를, 0x4d414353 같은 값을 다른 방법으로

import struct 
kFinderSig = struct.unpack(">L", "MACS")[0] 

하고 "맥"을 나타내는 코멘트를 남겨 :

당신은 (내장)를 사용하여 struct 모듈을 파이썬에서 결과를 재현 할 수 있습니다.

+0

수천 번 감사드립니다! 이것은 나를 미치게했다! 하나의 솔루션에 대해 특별히 감사드립니다! 나는 다른 일을하는 것을 보는 것을 배우는 것을 좋아한다. 그것은 톤을 돕는다! – Noitidart

+1

파이썬 3에서는'kFinderSig = int.from_bytes (b'MACS ','big ')'도 사용할 수 있습니다. ctypes 데이터 타입은 빅 엔디안 요구 사항 때문에 여기서는 편리하지 않습니다 :'kFinderSig = c_uint32 .__ ctype_be__. from_buffer_copy (b'MACS ')'. – eryksun

+0

감사합니다 @eryksun 난 몰랐어! :) – Noitidart