-3

編集:将来の Google 社員の abarnert の回答は、NSHIObject (HIToolbox から、HI はヒューマン インターフェイスを表す) を提供するように機能します。これに関するドキュメントはほとんど見つかりません。この時点で NSHI オブジェクトと呼ばれるhttps://www.google.com/#q=%22NSHIObject%22+site%3Aapple.com&filter=0 ) は、次のhttp://lists.apple. com/archives/webkitsdk-dev/2010/Sep/msg00007.htmlこのオブジェクトでは機能しません NSWindow は作成されません。りんご API のドキュメントをどうぞ。

NSWindow.initWithWindowRef_(nshi_object)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: Expecting instance of NSWindow as self, got one of NSHIObject

wxPython から渡されたポインターの読み込みに関する元の質問


Cコード

// our data
int a = 42;
// create a pointer to that data
int *p = &a;
// p now contains the address (say 1776) and that address has the integer 42
// get the data back
int ret_a = *p;

// now if we already have an address
int* manual_pointer = (int*) 1776; 
int man_a = *manual_pointer;

printf("%d,%d\n", ret_a, man_a);

pyobjc でこの構文を実行するにはどうすればよいですか? 私はそれがここに言及しているのを見ます

More complex types can be represented using longer type strings:

    a pointer to some type is _C_PTR followed by the type string of the pointed-to type.

それで、私は何をしますか?これは (オブジェクト タイプが NSInt の場合)?

arg = _C_PTR + "NSInt" + "1776"

Objective C コード (後で追加) これを何らかの方法で Python プロセスに挿入する必要があることに注意してください。そうしないと機能しません。

#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        char line[2048];
        // this will store are address
        long adr;
        printf("According to \n- http://forums.wxwidgets.org/viewtopic.php?f=23&t=31778\n- http://forums.wxwidgets.org/viewtopic.php?f=23&t=18645\n");
        printf("This will prompt you for a pointer address; please paste in the long you received from GetHandle()\n");
        printf("Please enter pointer address: ");
        fgets(line, sizeof(line), stdin);
        sscanf(line, "%ld", &adr);
        printf("Using address: %ld\n", adr);

        printf("Grabbing view...");

        // our NSView    
        NSView *view =  (__bridge NSView *)((void *)adr);

        NSRect f = view.frame;
        int w = f.size.width;
        int h = f.size.height;
        printf("Size(%d, %d)", w, h);

    }
    return 0;
}
4

2 に答える 2

2

Python はポインターをまったく扱いません。実際、あらゆる方法でそれらの使用を積極的に思いとどまらせています。関数を使用して Python オブジェクトのアドレスを取得することはできますがid()、対応する関数はありません (これは冗談ではありません)。

ここで、C から何かへのポインターがあるとすれば、その何かを ctypes モジュールで記述し、アドレスをポインターとして扱い、自由にデコードできるはずです。しかし、それはトリッキーです。

最も具体的な例ではありませんが、Python、Objective-C を知っていて、ctypes に精通している人々のベン図は、かなり小さなグループです (これが、iOS/ココア)。

于 2013-06-02T23:12:01.157 に答える