# ctaDetachObject

Closes a service object on a server.

#### Prototype

DWORD ctaDetachObject ( unsigned objhd)

Argument | Description
objhd | Object handle returned by ctaAttachObject.

#### Return values

Return value | Description
SUCCESS |
CTA_INVALID_HANDLE | The specified objhd is not valid.
CTAERR_NOT_IMPLEMENTED | This function is not available in the execution mode associated with the specified context.
CTAERR_NOT_INITIALIZED | Natural Access is not initialized. Call ctaInitialize first.

#### Details

ctaDetachObject disconnects the application from the object handle that ctaAttachObject obtained.

#### Example

int DemoAttachDetach(char* contextname, char* objname)
{
DWORD ret;
CTAQUEUEHD ctaqueuehd;
char *mgrlist[] = { "ADIMGR", "ADIMGR", "VCEMGR", "SWIMGR"};
ret = ctaCreateQueue( mgrlist,
sizeof(mgrlist)/sizeof(mgrlist[0]),
&ctaqueuehd);
if ( ret != SUCCESS )
return ret;
// Attach to existing server context
CTAHD ctahd;
ret = ctaAttachContext(ctaqueuehd,0,contextname,&ctahd);
if ( ret != SUCCESS )
return ret;
// Attach to existing call
unsigned callhd;
ret = ctaAttachObject(&ctahd,objname,&callhd);
if ( ret != SUCCESS )
return ret;
printf("Attached to call 0x%08X\n",callhd);
// Get call status
NCC_CALL_STATUS info;
ret = nccGetCallStatus( callhd, &info, sizeof( NCC_CALL_STATUS ) );
if ( ret != SUCCESS )
return ret;
printf("Called number: %s\n",info.calledaddr );
// Detach from the call
ret = ctaDetachObject(callhd);
if ( ret != SUCCESS )
return ret;
printf("Detached\n");
return SUCCESS;
}