private static unsafe int DoGetRecordTaskConflicts(IntPtr aPtr, uint aVersion, char *aRecordTaskID, char **aRecordTaskConflictIDList, uint *aUpdateID) { GCHandle gch = GCHandle.FromIntPtr(aPtr); DvServiceUpnpOrgScheduledRecording1 self = (DvServiceUpnpOrgScheduledRecording1)gch.Target; string recordTaskID = Marshal.PtrToStringAnsi((IntPtr)aRecordTaskID); string recordTaskConflictIDList; uint updateID; self.GetRecordTaskConflicts(aVersion, recordTaskID, out recordTaskConflictIDList, out updateID); *aRecordTaskConflictIDList = (char *)Marshal.StringToHGlobalAnsi(recordTaskConflictIDList).ToPointer(); *aUpdateID = updateID; return(0); }