1

私は Objective-C++ を多用しています。Objective-C コードに C++ コードを含めることはできますが、その逆は正しくないことはわかっています。作成したカスタム C++ オブジェクトを、分散オブジェクトを介して Objective-C プロセスに提供したいと考えています。これを実行しようとすると、次のエラー メッセージが表示されます。

error: cannot convert ‘custom_class*’ to ‘objc_object*’ in argument passing

カスタム C++ オブジェクトを別の Objective-C プロセスに提供する方法はありますか?

私が持っているコード:

#import <Cocoa/Cocoa.h>
#import <iostream>
#import <stdio.h>

using namespace std;

class custom_class {
    public:
    custom_class();
    ~custom_class();
    void hello();
};

custom_class::custom_class() { }
custom_class::~custom_class() { }
void custom_class::hello() { cout << "Hello World!" << endl; }

int main() {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    cout << "Starting vendor " << endl;

    custom_class *test = new custom_class();

    NSConnection *connection = [NSConnection connectionWithReceivePort:[NSPort port] sendPort:nil];
    [connection setRequestTimeout:1];
    [connection setRootObject:test];
    [connection registerName:@"DisObjTest"];

    [[NSRunLoop currentRunLoop] run];

    [pool drain];

    return 0;
}
4

2 に答える 2

4

これは、C++ クラスを Objective-C クラスでラップしないと実行できません。分散オブジェクトを可能にするすべての実行時機構は、C++ では利用できません。

于 2012-07-19T20:45:08.033 に答える
-1

Objective-C インターフェイス内にラップします。

class custom_class;
@interface custom_class_wrapper : NSObject
@propery (nonatomic, assign) custom_class* obj;
@end

または内部ではNSValue、これにはキャストが必要です

custom_class a;
id obj = [NSValue valueWithPointer:&a];
custom_class* a_val = static_cast<custom_class*>([obj pointerValue]);
于 2012-07-19T20:45:44.803 に答える