0
를 형식 정의를합니다 : 11, 내가 이해할 수없는 이유를MacRuby 포인터는이 코드가 Semgentation 오류와 함께 실패 구조체를
framework 'Cocoa'
framework 'CoreFoundation'
framework 'Security'
* keychainObject = Pointer.new_with_type('^{OpaqueSecKeychainRef}')
SecKeychainOpen("/Users/charbon/Library/Keychains/Josja.keychain",keychainObject)
SecKeychainLock(keychainObject)
이 (그것을 잠금 장치를 작동하기 때문에 나는 그것이 keychainObject 유형과 관련이있다 확신 기본 키 체인). 이 디버거 내가 포인터의 잘못된 유형을 사용하는 경우가 예상 내게 말했다 무엇 때문에 포인터의 유형으로 '^ {OpaqueSecKeychainRef을}'사용하고
SecKeychainLock(nil)
.
이 문제가 macruby/cocoa 마법을 파악하는 데 도움이되기를 바랍니다. SecKeychainOpen의 (a SecKeychainRef
에 대한 포인터를 필요로하는 동안 당신이
SecKeychainRef keyChainRef; SecKeychainOpen("/path/to/...", &keychainRef); SecKeychainLock(keyChainRef);
즉
을 쓴 것 C를 작성한다면참고로, 전체 출력은
cobalt:~ charbon$ macirb Desktop/test.rb
irb(main):001:0> framework 'Cocoa'
=> true
irb(main):002:0> framework 'CoreFoundation'
=> true
irb(main):003:0> framework 'Security'
=> true
irb(main):004:0> * keychainObject = Pointer.new_with_type('^{OpaqueSecKeychainRef}')
=> [#<Pointer:0x4007ac200>]
irb(main):005:0> SecKeychainOpen("/Users/charbon/Library/Keychains/Josja.keychain",keychainObject)
=> 0
irb(main):006:0> SecKeychainLock(keychainObject)
Segmentation fault: 11
shreding을 위해 Fred에게 감사드립니다! 세 번째 줄은 keychainObject 앞에 *와 붙지 않아야합니까? SecKeychainOpen ("/ 사용자/charbon/라이브러리/Keychains/Josja.keychain", * keychainObject) – MichaelC
아니요. * 루비에서 완전히 다른 것입니다 –
좋습니다. 고마워요. 여기에 "역"질문을 게시 : http://stackoverflow.com/questions/17902293/macruby-pointer-referencing-dereferencing-when-using-cocoa-frameworks – MichaelC