Hi All,

      I have two application in which I want to implement IPC using cocoa
distributed object . Then I have established NSConnection between two
process and I am able to get proxy for the object in the remote process
in the client application . Using this proxy I want to get access to various
other object that exist in the remote process . These object are instance of
both c++ class as well as objective c class.

      In the client process I have a base class pointer which I want to
point to the implementing class in the remote process. At the same time in
the client process I have objective c protocol in which I want to
recieve implementing objective c class's object that implements our
protocol.

      While the objective C version works peerfectly , the c++ version does
not.

Can you please guide me to a possible way by which I get the c++
implementation working . Please see my code below.


Thanks

//****************************************************************************************************************************************************
//                                              remote application
//****************************************************************************************************************************************************

                                                          /****TestRemote
.h*********/

class CRemoteBase;

@protocol RemoteProtocol
 - (CRemoteBase*) GetRemoteObject;
@end

@interface CRemote : NSObject <RemoteProtocol>
{
}
- (void) RegistreRemote;
@end

class CRemoteBase
{
   public:
             virtual void ShowMessage() = 0;
};

class CRemoteDerived : public CRemoteBase
{
  public:
            CRemoteDerived ();
            ~CRemoteDerived();
            void ShowMessage();
};

                                                              /****
TestRemote.cpp*********/
@implementing CRemote

- init
{
    return self;
}

- (void) RegisterRemote
{
    [[NSConnection defaultConnection] setRootObject : self];
    [[NSConnection defaultConnection] registerName :@"TestRemote"];
}

- (void) dealloc
{
   [super dealloc];
}

- (CRemoteBase*) GetRemoteObject
{
  return new CRemoteDerived();
}

@end //end

CRemoteDerived :: CRemoteDerived () {}

CRemoteDerived :: ~CRemoteDerived () {}

void CRemoteDerived :: ShowMessage()
{
   printf("This is remote object testing");
}


//****************************************************************************************************************************************************
//                                              reciever application
//****************************************************************************************************************************************************

                                          /****TestReciever.h*********/

@interface CTestReciever : NSObject
{
  id remoteProxy;
}
- (CRemoteBase*) GetDistantObject : (NSString*) registerName;
@end

                                     /****TestReciever.cpp*********/

@implementing CTestReciever

- init
{
 if (self = [super init])
{
  CRemoteBase ptrRemote = NULL;
  ptrRemote = (CRemoteBase*)[self GetDistantObject : @"TestRemote"];
  ptrRemote->ShowMessage();
  delete(ptrRemote);
}
return self;
}

- (void) dealloc
{
[super dealloc];
}

- (CRemoteBase*) GetDistantObject : (NSString*) registerName
{
remoteProxy = [[NSConnection rootProxyFor ConnectionWithRegisteredName
:registerName host : nil]retain];
[remoteProxy setProtocolForProxy : @protocol(RemoteProtocol)];
if(remoteProxy && [remoteProxy conformsToProtocol :
@protocol(RemoteProtocol)])
{
return [remoteProxy GetRemoteObject ];
}
else
return NULL;
}

@end
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to