APIRET rc = NO_ERROR;
    NS_IMETHOD SendRequest( const char *cmd ) {        /* Nothing like WM_COPYDATA in OS/2, where the OS allows pointers to be         * passed to a different process and automatically accessible by that         * process.  So we have to create shared mem on our side and then the         * process that gets the WM_COPYDATA message has to do a          * DosGetSharedMem on this pointer to be able to access the data         */        COPYDATASTRUCT *pcds;        APIRET rc = NO_ERROR;        PVOID pvData = NULL;        ULONG ulSize = sizeof(COPYDATASTRUCT)+strlen(cmd)+1;        rc = DosAllocSharedMem( &pvData, NULL, ulSize,                                (PAG_COMMIT|PAG_READ|PAG_WRITE|OBJ_GETTABLE) );        if( rc != NO_ERROR )        {           /* don't even try doing anything else.  Windows doesn't worry about            * errors so I guess that we shouldn't either            */           return NS_OK;        }        memset( pvData, '\0', ulSize );        pcds = (COPYDATASTRUCT *)(pvData);        pcds->dwData = 0;        pcds->cbData = strlen(cmd)+1;        /* put the data in the buffer space immediately after the          * COPYDATASTRUCT         */        pcds->lpData = &(pcds->chBuff);        if( cmd )        {           strcpy( (char *)pcds->lpData, cmd );        }        WinSendMsg( mHandle, WM_COPYDATA, 0, (MPARAM)pcds );        DosFreeMem( pvData );        return NS_OK;    }