Ứng dụng lập trình VSTO

Liên hệ QC
Mới copy được trên mạng mấy dòng code sau hỏng biết của ai nữa !?
Mã:
object qryOpenningRanges: TADOQuery
    Connection = ADOConnection1
    CursorType = ctStatic
    ParamCheck = False
    Parameters = <>
    SQL.Strings = (
     
        'SELECT Users.Inactive, Ranges.Inactive, Databases.Inactive, Grou' +
        'ps.GroupName, Users.UserName, tblOpenningRanges.IP, Ranges.ID, R' +
        'anges.RangeName, Ranges.RangeAddr, Sheets.SheetName, Databases.D' +
        'atabaseName, Databases.ID, Ranges.d1, Ranges.c1, Ranges.d2, Rang' +
        'es.c2, tblOpenningRanges.LocalWorkbook, tblOpenningRanges.LocalW' +
        'orksheet, Users.Handle, Ranges.IncludeWorkbook,Ranges.AllowUploa' +
        'd,Ranges.VBA'
     
        'FROM (Groups INNER JOIN Users ON Groups.ID = Users.GroupID) INNE' +
        'R JOIN ((Databases INNER JOIN Sheets ON Databases.ID = Sheets.Da' +
        'tabaseID) INNER JOIN (Ranges INNER JOIN tblOpenningRanges ON Ran' +
        'ges.ID = tblOpenningRanges.RangeID) ON Sheets.ID = Ranges.SheetI' +
        'D) ON Users.ID = tblOpenningRanges.UserID'
      'WHERE (((Users.Inactive)=False) AND ((Groups.Inactive)=False));')
    Left = 176
    Top = 328
  end
  object qryListRanges: TADOQuery
    Connection = ADOConnection1
    CursorType = ctStatic
    ParamCheck = False
    Parameters = <>
    SQL.Strings = (
     
        'SELECT Ranges.ID, Ranges.RangeName, Ranges.RangeAddr, Sheets.She' +
        'etName, Databases.DatabaseName, Ranges.d1, Ranges.c1, Ranges.d2,' +
        ' Ranges.c2, Ranges.IncludeWorkbook,Ranges.AllowUpload,Ranges.VBA'
     
        'FROM (Databases INNER JOIN Sheets ON Databases.ID = Sheets.Datab' +
        'aseID) INNER JOIN Ranges ON Sheets.ID = Ranges.SheetID;')
    Left = 176
    Top = 416
  end
end
 
Lần chỉnh sửa cuối:
Mới copy được trên mạng mấy dòng code sau hỏng biết của ai nữa !?
Mã:
object qryOpenningRanges: TADOQuery
    Connection = ADOConnection1
    CursorType = ctStatic
    ParamCheck = False
    Parameters = <>
    SQL.Strings = (
    
        'SELECT Users.Inactive, Ranges.Inactive, Databases.Inactive, Grou' +
        'ps.GroupName, Users.UserName, tblOpenningRanges.IP, Ranges.ID, R' +
        'anges.RangeName, Ranges.RangeAddr, Sheets.SheetName, Databases.D' +
        'atabaseName, Databases.ID, Ranges.d1, Ranges.c1, Ranges.d2, Rang' +
        'es.c2, tblOpenningRanges.LocalWorkbook, tblOpenningRanges.LocalW' +
        'orksheet, Users.Handle, Ranges.IncludeWorkbook,Ranges.AllowUploa' +
        'd,Ranges.VBA'
    
        'FROM (Groups INNER JOIN Users ON Groups.ID = Users.GroupID) INNE' +
        'R JOIN ((Databases INNER JOIN Sheets ON Databases.ID = Sheets.Da' +
        'tabaseID) INNER JOIN (Ranges INNER JOIN tblOpenningRanges ON Ran' +
        'ges.ID = tblOpenningRanges.RangeID) ON Sheets.ID = Ranges.SheetI' +
        'D) ON Users.ID = tblOpenningRanges.UserID'
      'WHERE (((Users.Inactive)=False) AND ((Groups.Inactive)=False));')
    Left = 176
    Top = 328
  end
  object qryListRanges: TADOQuery
    Connection = ADOConnection1
    CursorType = ctStatic
    ParamCheck = False
    Parameters = <>
    SQL.Strings = (
    
        'SELECT Ranges.ID, Ranges.RangeName, Ranges.RangeAddr, Sheets.She' +
        'etName, Databases.DatabaseName, Ranges.d1, Ranges.c1, Ranges.d2,' +
        ' Ranges.c2, Ranges.IncludeWorkbook,Ranges.AllowUpload,Ranges.VBA'
    
        'FROM (Databases INNER JOIN Sheets ON Databases.ID = Sheets.Datab' +
        'aseID) INNER JOIN Ranges ON Sheets.ID = Ranges.SheetID;')
    Left = 176
    Top = 416
  end
end

Đây là phần Form. Delphi lưu cấu trúc cảu Form vào Resource nên chỉ cần có phần mềm đọc Resource là thấy được cấu trúc. Bạn có nhìn thấy code ở các Procedure, Function không?
 
Đây là phần Form. Delphi lưu cấu trúc cảu Form vào Resource nên chỉ cần có phần mềm đọc Resource là thấy được cấu trúc. Bạn có nhìn thấy code ở các Procedure, Function không?
Bạn yên tâm đi là code Delphi không thể nào coi hết được ...

1/ đúng như bạn nói chỉ coi phần Form thôi còn lại ko thấy chi hết ....:D:rolleyes:
mặc dù mình thử nhiều cách ... vây nên khi ta biết được chỉ coi được phần Form thì ta điều chỉnh lại code viết hết vào Unit xong làm thủ tục keo nó thì hết coi .... ( Bạn thấy mình nói vậy ok không ???!)

2/ Mình có tìm hiểu thì thấy trên mạng nó nói code Delphi Build ra mã máy rất khó coi ... có thấy đi chăng nữa thì cũng ko thể nào đọc được mấy cái ký tự linh tinh ... còn trên Form nó nói vẫn coi bình thường ( đặc biệt lưu ý khúc này mà điều chỉnh viết code he)

3/ Còn code C# coi đơn giản lắm như coi code viết trên Excel vậy ... còn ai đó nói mã hóa hay pắc gì đó thì mạnh chưa biết hay chưa thử nên ko biết
... nếu bạn nào có 1 File DLL viết bằng C# đã mã hóa (Pắc gì đó ...) Úp lên cho Mạnh coi thử chút

nhưng cũng thấy trên Mạng nó nói khi code C# mà Pắc gì đó thì sử dụng nó chậm và hay lỗi + nó báo có Virus ... Thua ?!

4/ Mạnh mới nhập Môn Delphi thấy nó OK (bảo mật tốt ...Tốc độ nhanh ..) và đặc biệt nếu đam mê VBA mà viết thư viện Hàm cho VBA nữa thì đó là niềm mơ ước của bao người yêu VBA cho Excel vậy
 
Nếu bạn nào xài C# có thể tham khảo code sau ... khi viết Hàm .... xài trên Range
Lưu ý code này của ai đó trên Internet đó nha ...-0-0-0-===\.
Mã:
using ExcelDna.Integration;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text.RegularExpressions;

namespace TTool.IntelliSense
{
    public static class IntelliSenseServer
    {
        private class RegistrationInfo : IComparable<IntelliSenseServer.RegistrationInfo>
        {
            public string XllPath;

            public Guid ServerId;

            public string Version;

            public static IntelliSenseServer.RegistrationInfo FromRegistrationString(string registrationString)
            {
                IntelliSenseServer.RegistrationInfo result;
                try
                {
                    string[] array = registrationString.Split(new char[]
                    {
                        ','
                    });
                    result = new IntelliSenseServer.RegistrationInfo
                    {
                        XllPath = array[0],
                        ServerId = Guid.ParseExact(array[1], "N"),
                        Version = array[2]
                    };
                }
                catch (Exception ex)
                {
                    Debug.Print(string.Format("!!! ERROR: Invalid RegistrationString {0}: {1}", registrationString, ex.Message));
                    result = null;
                }
                return result;
            }

            public string ToRegistrationString()
            {
                return string.Format("{0},{1:N},{2}", this.XllPath, this.ServerId, this.Version);
            }

            public int CompareTo(IntelliSenseServer.RegistrationInfo other)
            {
                return IntelliSenseServer.RegistrationInfo.CompareVersions(this.Version, other.Version);
            }

            public static string GetControlMacroName(Guid serverId)
            {
                return string.Format("IntelliSenseServerControl_{0:N}", serverId);
            }

            public string GetControlMacroName()
            {
                return IntelliSenseServer.RegistrationInfo.GetControlMacroName(this.ServerId);
            }

            public static int CompareVersions(string versionString1, string versionString2)
            {
                int[] array = IntelliSenseServer.ParseVersion(versionString1);
                int[] array2 = IntelliSenseServer.ParseVersion(versionString2);
                int num = Math.Max(array.Length, array2.Length);
                int i = 0;
                int result;
                while (i < num)
                {
                    int num2 = (array.Length - 1 < i) ? 0 : array[i];
                    int num3 = (array2.Length - 1 < i) ? 0 : array2[i];
                    bool flag = num2 < num3;
                    if (flag)
                    {
                        result = -1;
                    }
                    else
                    {
                        bool flag2 = num2 > num3;
                        if (!flag2)
                        {
                            i++;
                            continue;
                        }
                        result = 1;
                    }
                    return result;
                }
                result = 0;
                return result;
            }
        }

        [CompilerGenerated]
        [Serializable]
        private sealed class <>c
        {
            public static readonly IntelliSenseServer.<>c <>9 = new IntelliSenseServer.<>c();

            public static Func<string, IntelliSenseServer.RegistrationInfo> <>9__35_0;

            internal IntelliSenseServer.RegistrationInfo <GetHighestPublishedRegistration>b__35_0(string str)
            {
                return IntelliSenseServer.RegistrationInfo.FromRegistrationString(str);
            }
        }

        private const string ServerVersion = "1.0.1";

        private const string DisabledVersionsMachineKeyName = "HKEY_LOCAL_MACHINE\\Software\\ExcelDna\\IntelliSense";

        private const string DisabledVersionsUserKeyName = "HKEY_CURRENT_USER\\Software\\ExcelDna\\IntelliSense";

        private const string DisabledVersionsValueName = "DisabledVersions";

        private const string DisabledVersionsVariable = "EXCELDNA_INTELLISENSE_DISABLEDVERSIONS";

        private const string ServersVariable = "EXCELDNA_INTELLISENSE_SERVERS";

        private const string ActiveServerVariable = "EXCELDNA_INTELLISENSE_ACTIVE_SERVER";

        private const string ControlMessageActivate = "ACTIVATE";

        private const string ControlMessageDeactivate = "DEACTIVATE";

        private const string ControlMessageRefresh = "REFRESH";

        private static string _xllPath = ExcelDnaUtil.get_XllPath();

        private static Guid _serverId = Guid.NewGuid();

        private static bool _isActive = false;

        private static IntelliSenseHelper _helper = null;

        private static string RegistrationString
        {
            get
            {
                IntelliSenseServer.RegistrationInfo registrationInfo = new IntelliSenseServer.RegistrationInfo
                {
                    XllPath = ExcelDnaUtil.get_XllPath(),
                    ServerId = IntelliSenseServer._serverId,
                    Version = "1.0.1"
                };
                return registrationInfo.ToRegistrationString();
            }
        }

        public static void Register(ref UIMonitor uimonitorget)
        {
            TraceLogger.Initialize();
            Logger.Initialization.Info(string.Format("IntelliSenseServer.Register Begin: Version {0} in {1}", "1.0.1", AppDomain.CurrentDomain.FriendlyName));
            bool flag = IntelliSenseServer.IsDisabled();
            if (!flag)
            {
                IntelliSenseServer.RegisterControlMacro();
                IntelliSenseServer.PublishRegistration();
                bool flag2 = false;
                IntelliSenseServer.RegistrationInfo activeRegistrationInfo = IntelliSenseServer.GetActiveRegistrationInfo();
                bool flag3 = activeRegistrationInfo == null;
                if (flag3)
                {
                    flag2 = true;
                }
                else
                {
                    bool flag4 = IntelliSenseServer.RegistrationInfo.CompareVersions("1.0.1", activeRegistrationInfo.Version) > 0;
                    if (flag4)
                    {
                        flag2 = true;
                    }
                    else
                    {
                        Logger.Initialization.Info(string.Format("IntelliSenseServer not being activated now. Active Version: {0}", activeRegistrationInfo.Version));
                    }
                }
                bool flag5 = flag2 && (activeRegistrationInfo == null || IntelliSenseServer.DeactivateServer(activeRegistrationInfo));
                if (flag5)
                {
                    IntelliSenseServer.Activate();
                    uimonitorget = IntelliSenseServer._helper._uiMonitor;
                }
                AppDomain.CurrentDomain.DomainUnload += new EventHandler(IntelliSenseServer.CurrentDomain_DomainUnload);
                AppDomain.CurrentDomain.ProcessExit += new EventHandler(IntelliSenseServer.CurrentDomain_ProcessExit);
                Logger.Initialization.Info("IntelliSenseServer.Register End");
            }
        }

        public static void Refresh()
        {
            Logger.Initialization.Info("IntelliSenseServer.Refresh Begin");
            bool isActive = IntelliSenseServer._isActive;
            if (isActive)
            {
                IntelliSenseServer.RefreshProviders();
            }
            else
            {
                IntelliSenseServer.RegistrationInfo activeRegistrationInfo = IntelliSenseServer.GetActiveRegistrationInfo();
                bool flag = activeRegistrationInfo != null;
                if (flag)
                {
                    IntelliSenseServer.RefreshServer(activeRegistrationInfo);
                }
            }
            Logger.Initialization.Info("IntelliSenseServer.Refresh End");
        }

        private static void CurrentDomain_ProcessExit(object sender, EventArgs e)
        {
            Logger.Initialization.Verbose("IntelliSenseServer ProcessExit Begin");
            bool isActive = IntelliSenseServer._isActive;
            if (isActive)
            {
                XlCall.ShutdownStarted();
                IntelliSenseServer.Deactivate();
            }
            Logger.Initialization.Verbose("IntelliSenseServer ProcessExit End");
        }

        private static void CurrentDomain_DomainUnload(object sender, EventArgs e)
        {
            Logger.Initialization.Verbose("IntelliSenseServer DomainUnload Begin");
            IntelliSenseServer.UnpublishRegistration();
            bool isActive = IntelliSenseServer._isActive;
            if (isActive)
            {
                IntelliSenseServer.Deactivate();
                IntelliSenseServer.RegistrationInfo highestPublishedRegistration = IntelliSenseServer.GetHighestPublishedRegistration();
                bool flag = highestPublishedRegistration != null;
                if (flag)
                {
                    IntelliSenseServer.ActivateServer(highestPublishedRegistration);
                }
            }
            Logger.Initialization.Verbose("IntelliSenseServer DomainUnload End");
        }

        internal static bool Activate()
        {
            bool result;
            try
            {
                IntelliSenseServer.SetActiveRegistrationInfo();
                IntelliSenseServer._isActive = true;
                IntelliSenseServer._helper = new IntelliSenseHelper();
                result = true;
            }
            catch (Exception arg)
            {
                Logger.Initialization.Error(string.Format("IntelliSenseServer.Activate failed: {0}", arg));
                result = false;
            }
            return result;
        }

        internal static bool Deactivate()
        {
            bool result;
            try
            {
                bool flag = IntelliSenseServer._helper != null;
                if (flag)
                {
                    IntelliSenseServer._helper.Dispose();
                }
                IntelliSenseServer._isActive = false;
                IntelliSenseServer.ClearActiveRegistrationInfo();
                result = true;
            }
            catch (Exception arg)
            {
                Logger.Initialization.Error(string.Format("IntelliSenseServer.Deactivate error: {0}", arg));
                result = false;
            }
            return result;
        }

        internal static void RefreshProviders()
        {
            Logger.Initialization.Info("IntelliSenseServer.RefreshProviders");
            try
            {
                Debug.Assert(IntelliSenseServer._helper != null);
                IntelliSenseServer._helper.RefreshProviders();
            }
            catch (Exception arg)
            {
                Logger.Initialization.Error(string.Format("IntelliSenseServer.RefreshProviders error: {0}", arg));
            }
        }

        private static bool IsDisabled()
        {
            string text = Registry.GetValue("HKEY_LOCAL_MACHINE\\Software\\ExcelDna\\IntelliSense", "DisabledVersions", null) as string;
            string text2 = Registry.GetValue("HKEY_CURRENT_USER\\Software\\ExcelDna\\IntelliSense", "DisabledVersions", null) as string;
            string environmentVariable = Environment.GetEnvironmentVariable("EXCELDNA_INTELLISENSE_DISABLEDVERSIONS");
            string text3 = "1.0.1";
            bool flag = IntelliSenseServer.IsVersionMatch(text3, text) || IntelliSenseServer.IsVersionMatch(text3, text2) || IntelliSenseServer.IsVersionMatch(text3, environmentVariable);
            bool flag2 = flag;
            if (flag2)
            {
                Logger.Initialization.Info(string.Format("IntelliSenseServer version {0} is disabled. MachineDisabled: {1}, UserDisabled: {2}, EnvironmentDisabled: {3}", new object[]
                {
                    text3,
                    text,
                    text2,
                    environmentVariable
                }));
            }
            return flag;
        }

        private static bool ActivateServer(IntelliSenseServer.RegistrationInfo registrationInfo)
        {
            bool result;
            try
            {
                object obj = XlCall.Excel(XlCall.xlUDF, new object[]
                {
                    registrationInfo.GetControlMacroName(),
                    "ACTIVATE"
                });
                result = (bool)obj;
            }
            catch (Exception ex)
            {
                Logger.Initialization.Error(ex, string.Format("IntelliSenseServer {0} could not be activated.", registrationInfo.ToRegistrationString()), new object[0]);
                result = false;
            }
            return result;
        }

        private static bool DeactivateServer(IntelliSenseServer.RegistrationInfo registrationInfo)
        {
            bool result;
            try
            {
                object obj = XlCall.Excel(XlCall.xlUDF, new object[]
                {
                    registrationInfo.GetControlMacroName(),
                    "DEACTIVATE"
                });
                bool flag = obj is ExcelError;
                if (flag)
                {
                    Logger.Initialization.Error(string.Format("IntelliSenseServer {0} could not be deactivated.", registrationInfo.ToRegistrationString()));
                    result = false;
                }
                else
                {
                    result = (bool)obj;
                }
            }
            catch (Exception ex)
            {
                Logger.Initialization.Error(ex, string.Format("IntelliSenseServer Deactivate call for {0} failed.", registrationInfo.ToRegistrationString()), new object[0]);
                result = false;
            }
            return result;
        }

        private static bool RefreshServer(IntelliSenseServer.RegistrationInfo registrationInfo)
        {
            bool result;
            try
            {
                object obj = XlCall.Excel(XlCall.xlUDF, new object[]
                {
                    registrationInfo.GetControlMacroName(),
                    "REFRESH"
                });
                bool flag = obj is ExcelError;
                if (flag)
                {
                    Logger.Initialization.Error(string.Format("IntelliSenseServer {0} could not be deactivated.", registrationInfo.ToRegistrationString()));
                    result = false;
                }
                else
                {
                    result = (bool)obj;
                }
            }
            catch (Exception ex)
            {
                Logger.Initialization.Error(ex, string.Format("IntelliSenseServer Deactivate call for {0} failed.", registrationInfo.ToRegistrationString()), new object[0]);
                result = false;
            }
            return result;
        }

        private static void PublishRegistration()
        {
            string environmentVariable = Environment.GetEnvironmentVariable("EXCELDNA_INTELLISENSE_SERVERS");
            string value = (environmentVariable == null) ? IntelliSenseServer.RegistrationString : string.Join(";", new string[]
            {
                environmentVariable,
                IntelliSenseServer.RegistrationString
            });
            Environment.SetEnvironmentVariable("EXCELDNA_INTELLISENSE_SERVERS", value);
        }

        private static void UnpublishRegistration()
        {
            List<string> list = new List<string>(Environment.GetEnvironmentVariable("EXCELDNA_INTELLISENSE_SERVERS").Split(new char[]
            {
                ';'
            }));
            bool condition = list.Remove(IntelliSenseServer.RegistrationString);
            Debug.Assert(condition, "IntelliSenseServer.UnpublishRegistration - Registration not found in EXCELDNA_INTELLISENSE_SERVERS");
            string value = string.Join(";", list);
            Environment.SetEnvironmentVariable("EXCELDNA_INTELLISENSE_SERVERS", value);
        }

        private static IntelliSenseServer.RegistrationInfo GetActiveRegistrationInfo()
        {
            string environmentVariable = Environment.GetEnvironmentVariable("EXCELDNA_INTELLISENSE_ACTIVE_SERVER");
            bool flag = string.IsNullOrEmpty(environmentVariable);
            IntelliSenseServer.RegistrationInfo result;
            if (flag)
            {
                result = null;
            }
            else
            {
                result = IntelliSenseServer.RegistrationInfo.FromRegistrationString(environmentVariable);
            }
            return result;
        }

        private static void SetActiveRegistrationInfo()
        {
            string environmentVariable = Environment.GetEnvironmentVariable("EXCELDNA_INTELLISENSE_ACTIVE_SERVER");
            Debug.Assert(environmentVariable == null, "ActiveServer already set while activating");
            Environment.SetEnvironmentVariable("EXCELDNA_INTELLISENSE_ACTIVE_SERVER", IntelliSenseServer.RegistrationString);
        }

        private static void ClearActiveRegistrationInfo()
        {
            Environment.SetEnvironmentVariable("EXCELDNA_INTELLISENSE_ACTIVE_SERVER", null);
        }

        private static int[] ParseVersion(string versionString)
        {
            bool flag = string.IsNullOrEmpty(versionString);
            int[] result;
            if (flag)
            {
                result = new int[1];
            }
            else
            {
                string[] array = versionString.Split(new char[]
                {
                    '.'
                });
                int[] array2 = new int[array.Length];
                for (int i = 0; i < array.Length; i++)
                {
                    int num;
                    bool flag2 = !int.TryParse(array[i], out num);
                    if (flag2)
                    {
                        result = new int[1];
                        return result;
                    }
                    array2[i] = num;
                }
                result = array2;
            }
            return result;
        }

        private static bool IsVersionMatch(string version, string versionPattern)
        {
            bool flag = string.IsNullOrEmpty(versionPattern);
            bool result;
            if (flag)
            {
                result = false;
            }
            else
            {
                bool flag2 = versionPattern == "*";
                if (flag2)
                {
                    result = true;
                }
                else
                {
                    List<string> list = new List<string>();
                    string[] array = versionPattern.Split(new char[]
                    {
                        ','
                    });
                    string[] array2 = array;
                    for (int i = 0; i < array2.Length; i++)
                    {
                        string text = array2[i];
                        string text2 = text.Trim();
                        bool flag3 = Regex.IsMatch(text2, "(\\d+\\.)+(\\.\\*)?", RegexOptions.None);
                        if (flag3)
                        {
                            list.Add("^" + text2.Replace(".*", "(\\.\\d+)*") + "$");
                        }
                    }
                    string pattern = string.Join("|", list);
                    result = Regex.IsMatch(version, pattern);
                }
            }
            return result;
        }

        private static IntelliSenseServer.RegistrationInfo GetHighestPublishedRegistration()
        {
            string environmentVariable = Environment.GetEnvironmentVariable("EXCELDNA_INTELLISENSE_SERVERS");
            bool flag = environmentVariable == null;
            IntelliSenseServer.RegistrationInfo result;
            if (flag)
            {
                Debug.Print("!!! ERROR: ServersVariable not set");
                result = null;
            }
            else
            {
                IEnumerable<string> arg_54_0 = environmentVariable.Split(new char[]
                {
                    ';'
                });
                Func<string, IntelliSenseServer.RegistrationInfo> arg_54_1;
                if ((arg_54_1 = IntelliSenseServer.<>c.<>9__35_0) == null)
                {
                    arg_54_1 = (IntelliSenseServer.<>c.<>9__35_0 = new Func<string, IntelliSenseServer.RegistrationInfo>(IntelliSenseServer.<>c.<>9.<GetHighestPublishedRegistration>b__35_0));
                }
                result = arg_54_0.Select(arg_54_1).Max<IntelliSenseServer.RegistrationInfo>();
            }
            return result;
        }

        private static void RegisterControlMacro()
        {
            MethodInfo method = typeof(IntelliSenseServer).GetMethod("IntelliSenseServerControl", BindingFlags.Static | BindingFlags.NonPublic);
            string controlMacroName = IntelliSenseServer.RegistrationInfo.GetControlMacroName(IntelliSenseServer._serverId);
            ExcelIntegration.RegisterMethods(new List<MethodInfo>
            {
                method
            }, new List<object>
            {
                new ExcelCommandAttribute
                {
                    Name = controlMacroName
                }
            }, new List<List<object>>
            {
                new List<object>
                {
                    null
                }
            });
        }

        private static object IntelliSenseServerControl(object control)
        {
            string a = control as string;
            bool flag = a == "ACTIVATE";
            object result;
            if (flag)
            {
                Debug.Print("IntelliSenseServer.Activate in AppDomain: " + AppDomain.CurrentDomain.FriendlyName);
                result = IntelliSenseServer.Activate();
            }
            else
            {
                bool flag2 = a == "DEACTIVATE";
                if (flag2)
                {
                    Debug.Print("IntelliSenseServer.Deactivate in AppDomain: " + AppDomain.CurrentDomain.FriendlyName);
                    result = IntelliSenseServer.Deactivate();
                }
                else
                {
                    bool flag3 = a == "REFRESH";
                    if (flag3)
                    {
                        Debug.Print("IntelliSenseServer.Refresh in AppDomain: " + AppDomain.CurrentDomain.FriendlyName);
                        bool flag4 = !IntelliSenseServer._isActive;
                        if (flag4)
                        {
                            Logger.Initialization.Error("IntelliSenseServer Refresh call on inactive server.");
                            result = false;
                        }
                        else
                        {
                            IntelliSenseServer.RefreshProviders();
                            result = true;
                        }
                    }
                    else
                    {
                        result = false;
                    }
                }
            }
            return result;
        }
    }
}
 
Lần chỉnh sửa cuối:
Ban đầu tính dùng dịch mã.Net mở 1 cái dll bị rối mã để xem sao nhưng tình cờ nó mở đầu ngay cái thư mục addin tôi thử nghiệm bằng ExcelDna thế là tôi tò mò mở luôn cái addin (ndAdin.dll) đó xem những cái gì tôi đã viết và tôi phải há hốc mồm vì bất ngờ trong đó (Thêm yêu ExcelDna }}}}}}}}}}}}}}}). Tôi cũng chưa chiêu trò gì với code trong đó cả (nguyên bản từ ExcelDna sinh ra), nên hy vọng là các bác chuyên gia bốc phốt lắm tài nhiều chiêu thử dịch ngược ra xem nhé.

Tính tôi không thích huyên thuyên, ba phải nên thường tự trải nghiệm và tự rút ra đáp án. Tôi cũng thử viết vài cái hàm để so sánh hiệu năng VBA với C# và rất ngạc nhiên với tốc độ chênh lệch giữa 2 ngôn ngữ này (cả chục lần khi thử nghiệm với mảng số và vòng lặp). Tiếc là Delphi vượt quá trình của tôi với phần cũng xót cái laptop cùi nên chưa dám cài để trải nghiệm nên không dám huyên thuyên ý kiến gì:unknw:.
 

File đính kèm

  • ndAddin.zip
    1.8 KB · Đọc: 21
.......................................
Mã:
namespace ndAddin
{
    public class MyAddin
    {
        [ExcelFunction(Description = "Equal Excel-DNA function")]
        public static bool xEqual(int x, int y)
        {
            DateTime now = DateTime.Now;
            double totalMilliseconds = (DateTime.Now - now).TotalMilliseconds;
            return x == y;
        }

        [ExcelFunction(Description = "Null Excel-DNA function")]
        public static string sayNull()
        {
            return "Null";
        }
    }
}
qua vb
Mã:
Namespace ndAddin
    Public Class MyAddin
        <ExcelFunction(Description = "Equal Excel-DNA function")>
        Public Shared Function xEqual(x As Integer, y As Integer) As Boolean
            Dim now As DateTime = DateTime.Now
            Dim totalMilliseconds As Double = (DateTime.Now - now).TotalMilliseconds
            Return x = y
        End Function

        <ExcelFunction(Description = "Null Excel-DNA function")>
        Public Shared Function sayNull() As String
            Return "Null"
        End Function
    End Class
End Namespace
 
Bạn yên tâm đi là code Delphi không thể nào coi hết được ...

1/ đúng như bạn nói chỉ coi phần Form thôi còn lại ko thấy chi hết ....:D:rolleyes:
mặc dù mình thử nhiều cách ... vây nên khi ta biết được chỉ coi được phần Form thì ta điều chỉnh lại code viết hết vào Unit xong làm thủ tục keo nó thì hết coi .... ( Bạn thấy mình nói vậy ok không ???!)

2/ Mình có tìm hiểu thì thấy trên mạng nó nói code Delphi Build ra mã máy rất khó coi ... có thấy đi chăng nữa thì cũng ko thể nào đọc được mấy cái ký tự linh tinh ... còn trên Form nó nói vẫn coi bình thường ( đặc biệt lưu ý khúc này mà điều chỉnh viết code he)

3/ Còn code C# coi đơn giản lắm như coi code viết trên Excel vậy ... còn ai đó nói mã hóa hay pắc gì đó thì mạnh chưa biết hay chưa thử nên ko biết
... nếu bạn nào có 1 File DLL viết bằng C# đã mã hóa (Pắc gì đó ...) Úp lên cho Mạnh coi thử chút

nhưng cũng thấy trên Mạng nó nói khi code C# mà Pắc gì đó thì sử dụng nó chậm và hay lỗi + nó báo có Virus ... Thua ?!

4/ Mạnh mới nhập Môn Delphi thấy nó OK (bảo mật tốt ...Tốc độ nhanh ..) và đặc biệt nếu đam mê VBA mà viết thư viện Hàm cho VBA nữa thì đó là niềm mơ ước của bao người yêu VBA cho Excel vậy

Rất tốt đó bạn. Tôi cũng tìm hiểu khá khá về bảo mật và hệ thống biên dịch code ở các compiler nên mới chọn Delphi. Nhưng cũng muốn xem công nghệ có phát sinh mới gì ngoài hiểu biết của mình không. Cảm ơn bạn.
 
Con Decompiler của bác Mạnh mạnh dữ. Mình dùng con ILSpy cùi nên không biết. Giờ thử với cái này nếu dịch ra được code gốc thì mình xin tên con decompiler của bác Mạnh.:victory:
................................................... 1 giây ................ là xong
Mã:
Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports System.Drawing
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Public Class 鯜똻부绋㟞싦
    Private Const 膛呚炚⯃蔪摃웸능 As String = "http://"

    Public Shared 㥬꣓쥙撙볳耘쨛 As Integer

    Public Shared ᐐ쉓믖偉鋒攚➐ As Integer

    Public Shared 힃ពퟂ稰䅅飶眃瞟 As Integer

    Public Shared ៧ⳣ臁딽롮訐㬰嗎 As Integer

    Public Shared 庑쇘密実㇑湆堺 As Integer

    Public Shared 晃࠽纔桶眎缢翽 As Integer

    Public Shared 焆ힾ婧㕖Åދ럛ำ As Byte

    Private 俾鴫ⰺ뇀릚༓ As CookieContainer

    Public Shared Function 旫壷⣟坕蛿輎敼俰(폕ᰭꩊ獥ω얩 As String, 橰ᣏꅦᐪ�ꋹ䡧䙽 As String, 年稬蘝綕뇧劍靍 As String, 坃蒄퍢⋪㮭耥뎥癨 As CookieContainer, Optional 턳詿䱣ᳵ緍㛈읍옰 As String=Nothing, Optional 蔻㈫뷛鴺蕞춽▹燇 As Integer=25000, Optional 㓇飨月꘷荒煁࣍☷ As Integer=15000) As String
        Dim ゑႍ䮹댝뉟딐⸭褓 As String
        Dim array As Byte()
        While True
            IL_00:
            Dim num As Integer = 2
            While True
                Select Case num
                    Case 0
                        GoTo IL_00
                    Case 2
                        ゑႍ䮹댝뉟딐⸭褓 = ඗⣧᢮⧩㧭ﺑ⥼렵.뜻㾱땟뱂蹟㢔蜴䀫(Of String)(959949775UI, 18399759179194280837UL)
                        Dim aSCIIEncoding As ASCIIEncoding = 디9Ⴆ؁芤萹�.꾏᧨ꐧ㦱セ㎃뻢硞()
                        array = 鑞窃럺ᝮ餱৅푡⻌.굞則硓찶ꔫጷ鞅∟(aSCIIEncoding, 年稬蘝綕뇧劍靍)
                        num = 1
                        Continue While
                End Select
                GoTo IL_22
            End While
        End While
Bài đã được tự động gộp:

............................
Mã:
Public Class 굾꽀Ⱁ굷⌾苟
    Public Function ToJson() As String
        Dim javaScriptSerializer As JavaScriptSerializer = New JavaScriptSerializer()
        Return javaScriptSerializer.Serialize(Me)
    End Function
End Class
Mã:
Public Sub New()
        While True
            IL_00:
            MyBase..ctor()
            Dim num As Integer = 1
            While True
                Select Case num
                    Case 0
                        GoTo IL_00
                    Case 1
                        IL_2F:
                        num = 2
                        Continue While
                    Case 2
                        Return
                End Select
                GoTo IL_2F
            End While
        End While
    End Sub
 

File đính kèm

  • hhhh.txt
    36.8 KB · Đọc: 3
................................................... 1 giây ................ là xong
Giờ đọc lại code cũ tiếng Tàu với tiếng Hàn lẫn lộn mà cười ra tiếng mán luôn /*-*/
Chưa kể nó bổ sung thêm cái từ khóa "Shared" với biến hay số 959949775UI, 18399759179194280837UL mà tôi không biết dùng làm gì. Dịch ngược xong không biết bác Mạnh có nắm được chức năng của một số hàm chuyên biệt hay công dụng của chương trình trong project đó không nhỉ?

Bác Mạnh không nói tên công cụ decompiler nhưng bây giờ thì tôi lại thêm thắc mắc là 4 năm trước mình dùng cái gì để Tàu hóa cái này.-0-/.
 
Lần chỉnh sửa cuối:
Giờ đọc lại code cũ tiếng Tàu với tiếng Hàn lẫn lộn mà cười ra tiếng mán luôn /*-*/
Chưa kể nó bổ sung thêm cái từ khóa "Shared" với biến hay số 959949775UI, 18399759179194280837UL mà tôi không biết dùng làm gì. Không biết bác Mạnh có nắm được chức năng của một số hàm chuyên biệt trong project đó không nhỉ?

Bác Mạnh không nói tên công cụ decompiler nhưng bây giờ thì tôi lại thêm thắc mắc là 4 năm trước mình dùng cái gì để Tàu hóa cái này.-0-/.
lười xem qua bạn coi đúng không
 

File đính kèm

  • unpack.rar
    85.2 KB · Đọc: 14
lười xem qua bạn coi đúng không
Cái này ko còn tiếng Hàn nhưng mà sao nó mọc thêm class linh tinh (Glass...), gay nhất là bị lỗi syntax (106 errors) khi thử biên dịch lại dù rằng chương trình gốc vẫn chạy bình thường. Lỗi phát sinh hình như do không đúng phiên bản ngôn ngữ C# mà tôi dùng chăng(?)

Anh có thể cho biết công cụ decompiler của anh được không ạ?
 
Lần chỉnh sửa cuối:
Cái này ko còn tiếng Hàn nhưng mà vẫn khó đọc hiểu dù chính tôi là người viết và quan trọng là bị lỗi syntax (106 errors) khi thử biên dịch lại dù rằng chương trình gốc vẫn chạy bình thường. Lỗi phát sinh hình như do không đúng phiên bản ngôn ngữ C# mà tôi dùng(?)

Anh có thể cho biết công cụ decompiler của anh được không ạ?
Cái này ko còn tiếng Hàn nhưng mà vẫn khó đọc hiểu dù chính tôi là người viết và quan trọng là bị lỗi syntax (106 errors) khi thử biên dịch lại dù rằng chương trình gốc vẫn chạy bình thường. Lỗi phát sinh hình như do không đúng phiên bản ngôn ngữ C# mà tôi dùng(?)

Anh có thể cho biết công cụ decompiler của anh được không ạ?[/QUOTE
Cái này ko còn tiếng Hàn nhưng mà vẫn khó đọc hiểu dù chính tôi là người viết và quan trọng là bị lỗi syntax (106 errors) khi thử biên dịch lại dù rằng chương trình gốc vẫn chạy bình thường. Lỗi phát sinh hình như do không đúng phiên bản ngôn ngữ C# mà tôi dùng chăng(?)

Anh có thể cho biết công cụ decompiler của anh được không ạ?
Cái này ko còn tiếng Hàn nhưng mà gay nhất là bị lỗi syntax (106 errors) khi thử biên dịch lại dù rằng chương trình gốc vẫn chạy bình thường. Lỗi phát sinh hình như do không đúng phiên bản ngôn ngữ C# mà tôi dùng chăng(?)

Anh có thể cho biết công cụ decompiler của anh được không ạ?
cái này được pack bằng confuserex 1.9 thì tìm unpack tương ứng với nó thôi bạn
 
Mạnh thấy Tây nó nói như vầy:

Khi ta sử dụng 1 phần mềm của bên thứ 3 can thiệp vào cái DLL gốc tức là ta đang cố tình làm sai lệch cấu trúc bên trong nó vậy nó sẻ phát sinh 1 vài cái sau tùy theo mức độ can thiệp và code bên trong đó DLL

1/ Làm tốc độ load Hàm hay sub trong DLL chậm đi ...

2/ Làm lỗi code trong 1 vài trường hợp tùy theo ...

3/ Có khi dính cả virus trong DLL đó mà mình ko biết ... nhưng cái diệt virus nó báo thế ?!
..............................

Nó khuyên là ko nên cố tình làm sai lệch hồ sơ vụ án ... mà ko giải quyết cái chi cả chỉ gặp thêm, rối rắm và rủi do cao mà thui :p:D

Vậy nên nguyên thủy nó sao xài vậy là tốt nhất .... nếu thấy cái C# ko an toàn ta chuyển kênh khác vậy cho nhanh
 
Lần chỉnh sửa cuối:
Mạnh thấy Tây nó như vầy:

Khi ta sử dụng 1 phần mềm của bên thứ 3 can thiệp vào cái DLL gốc tức là ta đang cố tình làm sai lệch cấu trúc bên trong nó vậy nó sẻ phát sinh 1 vài cái sau tùy theo mức độ can thiệp và code bên trong đó DLL

1/ Làm tốc độ load Hàm hay sub trong DLL chậm đi ...

2/ Làm lỗi code trong 1 vài trường hợp tùy theo ...

3/ Có khi dính cả virus trong DLL đó mà mình ko biết ... nhưng cái diệt virus nó báo thế ?!
..............................

Nó khuyên là ko nên cố tình làm sai lệch hồ sơ vụ án ... mà ko giải quyết cái chi cả chỉ gặp thêm, rối rắm và rủi do cao mà thui :p:D

Vậy nên nguyên thủy nó sao xài vậy là tốt nhất .... nếu thấy cái C# ko an toàn ta chuyển kênh khác vậy cho nhanh
các hacker không cần biết code mình viết cái gì chỉ biết cơ chế pm hoạt động như thế nào từ đó decomplied nó ra mã máy mà crack
Bài đã được tự động gộp:

các hacker không cần biết code mình viết cái gì chỉ biết cơ chế pm hoạt động như thế nào từ đó decomplied nó ra mã máy mà crack
ngôn ngữ nào cũng vậy không có ngôn ngữ lập trình nào mà các tay hacker ko can thiệp được
 
Mạnh thấy Tây nó như vầy:

Khi ta sử dụng 1 phần mềm của bên thứ 3 can thiệp vào cái DLL gốc tức là ta đang cố tình làm sai lệch cấu trúc bên trong nó vậy nó sẻ phát sinh 1 vài cái sau tùy theo mức độ can thiệp và code bên trong đó DLL

1/ Làm tốc độ load Hàm hay sub trong DLL chậm đi ...

2/ Làm lỗi code trong 1 vài trường hợp tùy theo ...

3/ Có khi dính cả virus trong DLL đó mà mình ko biết ... nhưng cái diệt virus nó báo thế ?!
..............................

Nó khuyên là ko nên cố tình làm sai lệch hồ sơ vụ án ... mà ko giải quyết cái chi cả chỉ gặp thêm, rối rắm và rủi do cao mà thui :p:D

Vậy nên nguyên thủy nó sao xài vậy là tốt nhất .... nếu thấy cái C# ko an toàn ta chuyển kênh khác vậy cho nhanh
Lỗi project dịch ngược thôi chứ tôi thấy phần mềm nguyên gốc (được rối code) thì chạy bình thường mà?
Nếu dịch ngược lại mà không thể biên dịch hay để nắm được chức năng code thì coi như mục tiêu dịch ngược coi như thất bại đúng không? (trừ khi là muốn học từ vựng tiếng Hàn:victory:).

Với lại anh Mạnh xài Delphi có bản quyền sao? Nếu xài crack thì không biết cái nào có virus hay không virus đâu nhé? Trước đây người ta hay có cái trò đóng băng đĩa cứng để chống virus nhưng họ lại cài mấy phần mềm lậu trước khi đóng băng thế là tôi tủm tỉm cười rằng không biết là để chống virus hay là để bảo tồn virus trong máy --=0.
 
Mạnh thấy Tây nó như vầy:

Khi ta sử dụng 1 phần mềm của bên thứ 3 can thiệp vào cái DLL gốc tức là ta đang cố tình làm sai lệch cấu trúc bên trong nó vậy nó sẻ phát sinh 1 vài cái sau tùy theo mức độ can thiệp và code bên trong đó DLL

1/ Làm tốc độ load Hàm hay sub trong DLL chậm đi ...

2/ Làm lỗi code trong 1 vài trường hợp tùy theo ...

3/ Có khi dính cả virus trong DLL đó mà mình ko biết ... nhưng cái diệt virus nó báo thế ?!
..............................

Nó khuyên là ko nên cố tình làm sai lệch hồ sơ vụ án ... mà ko giải quyết cái chi cả chỉ gặp thêm, rối rắm và rủi do cao mà thui :p:D

Vậy nên nguyên thủy nó sao xài vậy là tốt nhất .... nếu thấy cái C# ko an toàn ta chuyển kênh khác vậy cho nhanh
với delphi người ta có thể xem được thiết kế các form tên của các button, textbox..... trên form, code form, các câu lệnh tương ứng với nó ở dạng assembly
 
với delphi người ta có thể xem được thiết kế các form tên của các button, textbox..... trên form, code form, các câu lệnh tương ứng với nó ở dạng assembly
Thì bài 43 mạnh nói đó ... nếu ta ko viết code ngay trên Form mà ta viết code vào Unit Delphi xong làm thủ tục keo nó thì có mà tịt
(Tại thời điểm này ... còn sau này vài năm nữa ko biết :p:D )
 
Lỗi project dịch ngược thôi chứ tôi thấy phần mềm nguyên gốc (được rối code) thì chạy bình thường mà?
Nếu dịch ngược lại mà không thể biên dịch hay để nắm được chức năng code thì coi như mục tiêu dịch ngược coi như thất bại.

Với lại anh Mạnh xài Delphi có bản quyền sao? Nếu xài crack thì không biết cái nào có virus hay không virus đâu nhé? Trước đây người ta hay có cái trò đóng băng đĩa cứng để chống virus nhưng họ lại cài mấy phần mềm lậu trước khi đóng băng thế là tôi tủm tỉm cười rằng không biết là để chống virus hay là để bảo tồn virus trong máy --=0.
thực ra virus còn diệt được đóng băng ổ đĩa tuy nhốt virus trong đó nhưng nó còn nhiều cái lơi lắm: như không tạo thêm rác cho hệ thống,ngăn ngừa các phần mềm mã độc như
Lỗi project dịch ngược thôi chứ tôi thấy phần mềm nguyên gốc (được rối code) thì chạy bình thường mà?
Nếu dịch ngược lại mà không thể biên dịch hay để nắm được chức năng code thì coi như mục tiêu dịch ngược coi như thất bại đúng không? (trừ khi là muốn học từ vựng tiếng Hàn:victory:).

Với lại anh Mạnh xài Delphi có bản quyền sao? Nếu xài crack thì không biết cái nào có virus hay không virus đâu nhé? Trước đây người ta hay có cái trò đóng băng đĩa cứng để chống virus nhưng họ lại cài mấy phần mềm lậu trước khi đóng băng thế là tôi tủm tỉm cười rằng không biết là để chống virus hay là để bảo tồn virus trong máy --=0.
-heeeeeeeee đa số phần mềm mà việt nam chúng ta đang xài là lậu hết nên không tránh được virus nhưng đóng băng có thể tránh được mấy phần mềm đòi tiền chuột, giảm rác hệ thống......
 
Lỗi project dịch ngược thôi chứ tôi thấy phần mềm nguyên gốc (được rối code) thì chạy bình thường mà?
Nếu dịch ngược lại mà không thể biên dịch hay để nắm được chức năng code thì coi như mục tiêu dịch ngược coi như thất bại đúng không? (trừ khi là muốn học từ vựng tiếng Hàn:victory:).

Với lại anh Mạnh xài Delphi có bản quyền sao? Nếu xài crack thì không biết cái nào có virus hay không virus đâu nhé? Trước đây người ta hay có cái trò đóng băng đĩa cứng để chống virus nhưng họ lại cài mấy phần mềm lậu trước khi đóng băng thế là tôi tủm tỉm cười rằng không biết là để chống virus hay là để bảo tồn virus trong máy --=0.
Mạnh xài Delphi Chùa ... nhưng test qua mấy cái diệt virus nổi tiếng ròi thấy nó không la làng lên ..................... mà IM RE à :p:D:eek:
 
Web KT
Back
Top Bottom