コード例 #1
0
 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);
     }
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
ファイル: TcCallback.cs プロジェクト: r-Larch/TcBuild
        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);
                    }
                }
            }
        }
コード例 #12
0
        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);
                    }
                }
            }
        }
コード例 #13
0
        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;
                }
            }
        }