public static void GetDetectString(IntPtr detectString, int maxLen) { callSignature = "GetDetectString"; try { TcUtils.WriteStringAnsi(Plugin.DetectString, detectString, maxLen); TraceCall(TraceLevel.Warning, Plugin.DetectString); } catch (Exception ex) { ProcessException(ex); } }
public static int ExecuteFile(IntPtr mainWin, IntPtr remoteName, [MarshalAs(UnmanagedType.LPStr)] string verb) { var rmtName = Marshal.PtrToStringAnsi(remoteName); var result = ExecuteFileInternal(mainWin, rmtName, verb); if (result.Type == ExecResult.ExecEnum.SymLink && result.SymlinkTarget.HasValue) { TcUtils.WriteStringAnsi(result.SymlinkTarget, remoteName, 0); } return((int)result.Type); }
public static bool GetLocalName(IntPtr remoteName, int maxLen) { var rmtName = Marshal.PtrToStringAnsi(remoteName); var result = GetLocalNameInternal(ref rmtName, maxLen); if (result) { TcUtils.WriteStringAnsi(rmtName, remoteName, 0); } return(result); }
public static int GetPreviewBitmap(IntPtr remoteName, int width, int height, IntPtr returnedBitmap) { var rmtName = Marshal.PtrToStringAnsi(remoteName); var inRmtName = rmtName; var result = GetPreviewBitmapInternal(ref rmtName, width, height, returnedBitmap); if (result != PreviewBitmapResult.PreviewBitmapEnum.None && !string.IsNullOrEmpty(rmtName) && !rmtName.Equals(inRmtName, StringComparison.CurrentCultureIgnoreCase)) { TcUtils.WriteStringAnsi(rmtName, remoteName, 0); } return((int)result); }
public static int ExtractCustomIcon(IntPtr remoteName, int extractFlags, IntPtr theIcon) { var rmtName = Marshal.PtrToStringAnsi(remoteName); var inRmtName = rmtName; var result = ExtractIconInternal(ref rmtName, extractFlags, theIcon); if (result != ExtractIconResult.ExtractIconEnum.UseDefault && !rmtName.Equals(inRmtName, StringComparison.CurrentCultureIgnoreCase)) { TcUtils.WriteStringAnsi(rmtName, remoteName, 0); } return((int)result); }
public static void GetDefRootName(IntPtr rootName, int maxLen) { _callSignature = "GetDefRootName"; try { TcUtils.WriteStringAnsi(Plugin.Title, rootName, maxLen); TraceCall(TraceLevel.Warning, Plugin.Title); } catch (Exception ex) { TcUtils.WriteStringAnsi(ex.Message, rootName, maxLen); ProcessException(ex); } }
public static int PutFile([MarshalAs(UnmanagedType.LPStr)] string localName, IntPtr remoteName, int copyFlags) { var rmtName = Marshal.PtrToStringAnsi(remoteName); var inRmtName = rmtName; var result = PutFileInternal(localName, ref rmtName, (CopyFlags)copyFlags); if (result == FileSystemExitCode.OK && !rmtName.Equals(inRmtName, StringComparison.CurrentCultureIgnoreCase)) { TcUtils.WriteStringAnsi(rmtName, remoteName, 0); } return((int)result); }
public static bool GetDefaultView(IntPtr viewContents, IntPtr viewHeaders, IntPtr viewWidths, IntPtr viewOptions, int maxLen) { var result = GetDefaultViewFs(out var contents, out var headers, out var widths, out var options, maxLen); if (result) { TcUtils.WriteStringAnsi(contents, viewContents, maxLen); TcUtils.WriteStringAnsi(headers, viewHeaders, maxLen); TcUtils.WriteStringAnsi(widths, viewWidths, maxLen); TcUtils.WriteStringAnsi(options, viewOptions, maxLen); return(true); } return(false); }
public static int GetSupportedField(int fieldIndex, IntPtr fieldName, IntPtr units, int maxLen) { var result = ContentFieldType.NoMoreFields; _callSignature = $"ContentGetSupportedField ({fieldIndex})"; try { if (ContentPlugin != null) { result = ContentPlugin.GetSupportedField(fieldIndex, out var fieldNameStr, out var unitsStr, maxLen); if (result != ContentFieldType.NoMoreFields) { if (string.IsNullOrEmpty(fieldNameStr)) { result = ContentFieldType.NoMoreFields; } else { TcUtils.WriteStringAnsi(fieldNameStr, fieldName, maxLen); if (string.IsNullOrEmpty(unitsStr)) { units = IntPtr.Zero; } else { TcUtils.WriteStringAnsi(unitsStr, units, maxLen); } } } // !!! may produce much trace info !!! TraceCall(TraceLevel.Verbose, $"{result.ToString()} - {fieldNameStr} - {unitsStr}"); } } catch (Exception ex) { ProcessException(ex); } return((int)result); }
public static int GetSupportedField(int fieldIndex, IntPtr fieldName, IntPtr units, int maxLen) { ContentFieldType result = ContentFieldType.NoMoreFields; callSignature = String.Format("ContentGetSupportedField ({0})", fieldIndex); try { string fieldNameStr, unitsStr; result = Plugin.GetSupportedField(fieldIndex, out fieldNameStr, out unitsStr, maxLen); if (result != ContentFieldType.NoMoreFields) { if (String.IsNullOrEmpty(fieldNameStr)) { result = ContentFieldType.NoMoreFields; } else { TcUtils.WriteStringAnsi(fieldNameStr, fieldName, maxLen); if (String.IsNullOrEmpty(unitsStr)) { units = IntPtr.Zero; } else { TcUtils.WriteStringAnsi(unitsStr, units, maxLen); } } } // !!! may produce much trace info !!! TraceCall(TraceLevel.Verbose, String.Format("{0} - {1} - {2}", result.ToString(), fieldNameStr, unitsStr)); } catch (Exception ex) { ProcessException(ex); } return((int)result); }
public static void FsRequestCallback(RequestEventArgs e) { if (requestCallbackW != null || requestCallback != null) { var retText = IntPtr.Zero; if (e.RequestType < (int)RequestType.MsgOk) { if (requestCallbackW != null) { retText = Marshal.AllocHGlobal(e.MaxLen * 2); Marshal.Copy(new char[e.MaxLen], 0, retText, e.MaxLen); } else { retText = Marshal.AllocHGlobal(e.MaxLen); Marshal.Copy(new byte[e.MaxLen], 0, retText, e.MaxLen); } } try { if (retText != IntPtr.Zero && !string.IsNullOrEmpty(e.ReturnedText)) { if (requestCallbackW != null) { Marshal.Copy(e.ReturnedText.ToCharArray(), 0, retText, e.ReturnedText.Length); } else { TcUtils.WriteStringAnsi(e.ReturnedText, retText, 0); } } if (requestCallbackW != null) { e.Result = requestCallbackW(e.PluginNumber, e.RequestType, e.CustomTitle, e.CustomText, retText, e.MaxLen) ? 1 : 0; } else { e.Result = requestCallback(e.PluginNumber, e.RequestType, e.CustomTitle, e.CustomText, retText, e.MaxLen) ? 1 : 0; } #if TRACE var traceStr = $"OnRequest ({e.PluginNumber}, {(RequestType) e.RequestType}): {e.ReturnedText}"; #endif if (e.Result != 0 && retText != IntPtr.Zero) { e.ReturnedText = (requestCallbackW != null) ? Marshal.PtrToStringUni(retText) : Marshal.PtrToStringAnsi(retText); #if TRACE traceStr += " => " + e.ReturnedText; #endif } #if TRACE TraceOut(TraceLevel.Verbose, $"{traceStr} - {e.Result}.", Callback); #endif } finally { if (retText != IntPtr.Zero) { Marshal.FreeHGlobal(retText); } } } }
public static void FsRequestCallback(RequestEventArgs e) { if (e.RequestType == (int)RequestType.DomainInfo) { e.ReturnedText = TcPluginLoader.DomainInfo; e.Result = 1; #if TRACE TraceOut(TraceLevel.Info, e.ReturnedText, TraceMsg4); #endif } else if (requestCallbackW != null || requestCallback != null) { IntPtr retText = IntPtr.Zero; if (e.RequestType < (int)RequestType.MsgOk) { if (requestCallbackW != null) { retText = Marshal.AllocHGlobal(e.MaxLen * 2); Marshal.Copy(new char[e.MaxLen], 0, retText, e.MaxLen); } else { retText = Marshal.AllocHGlobal(e.MaxLen); Marshal.Copy(new byte[e.MaxLen], 0, retText, e.MaxLen); } } try { if (retText != IntPtr.Zero && !String.IsNullOrEmpty(e.ReturnedText)) { if (requestCallbackW != null) { Marshal.Copy(e.ReturnedText.ToCharArray(), 0, retText, e.ReturnedText.Length); } else { TcUtils.WriteStringAnsi(e.ReturnedText, retText, 0); } } if (requestCallbackW != null) { e.Result = requestCallbackW(e.PluginNumber, e.RequestType, e.CustomTitle, e.CustomText, retText, e.MaxLen) ? 1 : 0; } else { e.Result = requestCallback(e.PluginNumber, e.RequestType, e.CustomTitle, e.CustomText, retText, e.MaxLen) ? 1 : 0; } #if TRACE string traceStr = String.Format(TraceMsg5, e.PluginNumber, ((RequestType)e.RequestType).ToString(), e.ReturnedText); #endif if (e.Result != 0 && retText != IntPtr.Zero) { e.ReturnedText = (requestCallbackW != null) ? Marshal.PtrToStringUni(retText) : Marshal.PtrToStringAnsi(retText); #if TRACE traceStr += " => " + e.ReturnedText; #endif } #if TRACE TraceOut(TraceLevel.Verbose, String.Format(TraceMsg7, traceStr, e.Result), TraceMsg1); #endif } finally { if (retText != IntPtr.Zero) { Marshal.FreeHGlobal(retText); } } } }
public void CopyTo(IntPtr ptr) { if (ptr != IntPtr.Zero && changed) { switch (FieldType) { case ContentFieldType.Numeric32: Marshal.WriteInt32(ptr, Int32.Parse(strValue)); break; case ContentFieldType.Numeric64: Marshal.WriteInt64(ptr, Int64.Parse(strValue)); break; case ContentFieldType.NumericFloating: string altStr = null; string floatStr = strValue; if (floatStr.Contains("|")) { int pos = floatStr.IndexOf("|", StringComparison.Ordinal); altStr = floatStr.Substring(pos + 1); floatStr = floatStr.Substring(0, pos); } Marshal.Copy(new[] { Double.Parse(floatStr) }, 0, ptr, 1); if (!String.IsNullOrEmpty(altStr)) { // ??? ANSI or Unicode IntPtr altOutput = new IntPtr(ptr.ToInt32() + sizeof(Double)); Marshal.Copy((altStr + (Char)0).ToCharArray(), 0, altOutput, altStr.Length + 1); } break; case ContentFieldType.Date: DateTime date = DateTime.Parse(strValue); Marshal.Copy(new[] { (Int16)date.Year, (Int16)date.Month, (Int16)date.Day }, 0, ptr, 3); break; case ContentFieldType.Time: DateTime time = DateTime.Parse(strValue); Marshal.Copy(new[] { (Int16)time.Hour, (Int16)time.Minute, (Int16)time.Second }, 0, ptr, 3); break; case ContentFieldType.Boolean: Marshal.WriteInt32(ptr, Boolean.Parse(strValue) ? 1 : 0); break; case ContentFieldType.MultipleChoice: case ContentFieldType.String: TcUtils.WriteStringAnsi(strValue, ptr, 0); break; case ContentFieldType.FullText: // ??? can it be Unicode ??? TcUtils.WriteStringAnsi(strValue, ptr, 0); break; case ContentFieldType.DateTime: Marshal.WriteInt64(ptr, DateTime.Parse(strValue).ToFileTime()); break; case ContentFieldType.WideString: TcUtils.WriteStringUni(strValue, ptr, 0); break; } } }