private static unsafe int DoFreeFormQuery(IntPtr aPtr, uint aVersion, char *aContainerID, uint aCDSView, char *aQueryRequest, char **aQueryResult, uint *aUpdateID)
        {
            GCHandle gch = GCHandle.FromIntPtr(aPtr);
            DvServiceUpnpOrgContentDirectory3 self = (DvServiceUpnpOrgContentDirectory3)gch.Target;
            string containerID  = Marshal.PtrToStringAnsi((IntPtr)aContainerID);
            string queryRequest = Marshal.PtrToStringAnsi((IntPtr)aQueryRequest);
            string queryResult;
            uint   updateID;

            self.FreeFormQuery(aVersion, containerID, aCDSView, queryRequest, out queryResult, out updateID);
            *aQueryResult = (char *)Marshal.StringToHGlobalAnsi(queryResult).ToPointer();
            *aUpdateID    = updateID;
            return(0);
        }