PTHotKeyLibを64ビットに変更する作業を進めていますが、わからないコードで問題が発生しました周りを回る方法。 PTHotKeyCenterでは、registerHotKeyメソッドはEventHotKeyIDインスタンスを作成し、次にPTHotKeyオブジェクトをid属性に埋め込みます。元のコードは長い間使用されていました。 Appleの64ビットプログラミングガイドに従って、NSIntegerに変換しました。64ビット変換で異なるサイズの整数からポインタへのキャストを解決する
- (BOOL)registerHotKey:(PTHotKey *)theHotKey {
OSStatus error;
EventHotKeyID hotKeyID;
EventHotKeyRef carbonHotKey;
NSValue *key = nil;
if ([[self allHotKeys] containsObject:theHotKey])
[self unregisterHotKey:theHotKey];
if (![[theHotKey keyCombo] isValidHotKeyCombo])
return YES;
hotKeyID.signature = kHotKeySignature;
hotKeyID.id = (NSInteger)theHotKey;
... //Rest is not relevant
}
ユーザーはホットキーをトリガすると、それはsendCarbonEventを呼び出します。EventHotKeyIDのうち、PTHotKeyインスタンスを引っ張るしようとする方法。これは、32ビットの土地で働いていたが、64ビットに対してコンパイルするとき、それは
x86_64版からの切り替え- (OSStatus)sendCarbonEvent:(EventRef)event {
OSStatus error;
EventHotKeyID hotKeyID;
SGHotKey *hotKey;
NSAssert(GetEventClass(event) == kEventClassKeyboard, @"Unknown event class");
error = GetEventParameter(event,
kEventParamDirectObject,
typeEventHotKeyID,
nil,
sizeof(EventHotKeyID),
nil,
&hotKeyID);
if (error)
return error;
NSAssert(hotKeyID.signature == kHotKeySignature, @"Invalid hot key id");
NSAssert(hotKeyID.id != 0, @"Invalid hot key id");
hotKey = (SGHotKey *)hotKeyID.id; // warning: cast to pointer from integer of different size
// Omitting the rest of the code
}
警告「異なるサイズの整数からポインタへのキャスト」を与えるバックI386にコンパイル警告、すべてを削除し、正しく動作します。 x86_64の下では、クラッシャーが発生し、その問題を回避する方法がわかりません。どのようにそれを解決するための任意の提案?
ポインタを保持するには小さすぎる変数へのポインタを置くにはどんなへのポインタが、動作しませに行くのではありません。 –