private static unsafe int DoBrowse(IntPtr aPtr, uint aVersion, char *aObjectID, char *aBrowseFlag, char *aFilter, uint aStartingIndex, uint aRequestedCount, char *aSortCriteria, char **aResult, uint *aNumberReturned, uint *aTotalMatches, uint *aUpdateID) { GCHandle gch = GCHandle.FromIntPtr(aPtr); DvServiceUpnpOrgContentDirectory3 self = (DvServiceUpnpOrgContentDirectory3)gch.Target; string objectID = Marshal.PtrToStringAnsi((IntPtr)aObjectID); string browseFlag = Marshal.PtrToStringAnsi((IntPtr)aBrowseFlag); string filter = Marshal.PtrToStringAnsi((IntPtr)aFilter); string sortCriteria = Marshal.PtrToStringAnsi((IntPtr)aSortCriteria); string result; uint numberReturned; uint totalMatches; uint updateID; self.Browse(aVersion, objectID, browseFlag, filter, aStartingIndex, aRequestedCount, sortCriteria, out result, out numberReturned, out totalMatches, out updateID); *aResult = (char *)Marshal.StringToHGlobalAnsi(result).ToPointer(); *aNumberReturned = numberReturned; *aTotalMatches = totalMatches; *aUpdateID = updateID; return(0); }