private static unsafe int DoGetAllowedValues(IntPtr aPtr, uint aVersion, char *aDataTypeID, char *aFilter, char **aPropertyInfo) { GCHandle gch = GCHandle.FromIntPtr(aPtr); DvServiceUpnpOrgScheduledRecording1 self = (DvServiceUpnpOrgScheduledRecording1)gch.Target; string dataTypeID = Marshal.PtrToStringAnsi((IntPtr)aDataTypeID); string filter = Marshal.PtrToStringAnsi((IntPtr)aFilter); string propertyInfo; self.GetAllowedValues(aVersion, dataTypeID, filter, out propertyInfo); *aPropertyInfo = (char *)Marshal.StringToHGlobalAnsi(propertyInfo).ToPointer(); return(0); }