C#_利用反射通過Appdomain調用靜態類中的方法


直接上代碼了:

我的DLL(class library):

namespace MyClassLibrary
{
    public static class Test
    {
        [DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern int MessageBox(IntPtr hWnd, string lpText, string lpCaption, uint uType);
        public static void Show() { Console.WriteLine("123"); }
        public static string ShowUpper(string str) { Console.WriteLine(str.ToUpper()); return str.ToUpper(); }
    }
}

Code:

class Program
    {
        static void Main(string[] args)
        {
            var loadedAssembliesBefore = AppDomain.CurrentDomain.GetAssemblies();
            var domain = AppDomain.CreateDomain("Domain");
            domain.DoCallBack(LoadAssemblyAndCallStaticMethod);
            Console.ReadKey();
        }
        static void LoadAssemblyAndCallStaticMethod()
        {
            var assembly = Assembly.LoadFrom(@"D:\TestFile\MyClassLibrary.dll"); //dll路徑

            Type t = assembly.GetType("MyClassLibrary.Test");
            t.InvokeMember("Show",
                          BindingFlags.Public |
                          BindingFlags.Static |
                          BindingFlags.InvokeMethod,
                          null,
                          null,
                          new object[0] { });
        }
    }

注意:反射只能針對托管代碼,對於P/Invoke非托管代碼不能使用,所以不能調用 MessageBox 方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM