private static unsafe int DoGetPropertyList(IntPtr aPtr, uint aVersion, char *aDataTypeID, char **aPropertyList) { GCHandle gch = GCHandle.FromIntPtr(aPtr); DvServiceUpnpOrgScheduledRecording1 self = (DvServiceUpnpOrgScheduledRecording1)gch.Target; string dataTypeID = Marshal.PtrToStringAnsi((IntPtr)aDataTypeID); string propertyList; self.GetPropertyList(aVersion, dataTypeID, out propertyList); *aPropertyList = (char *)Marshal.StringToHGlobalAnsi(propertyList).ToPointer(); return(0); }