日期:2014-05-18  浏览次数:21296 次

C# 反射 如何获取一个程序集的所有非托管DLL
如下,怎样获取一个程序集DllImport特性导入的所有的非托管DLL?

[DllImport("user32.dll")]
public static extern bool MessageBeep(BeepType beepType);  



------解决方案--------------------
不知道是什么样的type
------解决方案--------------------
必然不行.

------解决方案--------------------
楼主,这样跟你说呗,反射是基于net的组件化编程,而非托管dll是基于不同平台开发普通dll,不具备组件性质,自然不能用反射来获取。

类似的方式倒是可以考虑:

LoadLibrary() + GetProcAddress()
------解决方案--------------------
C# code

            Assembly asm = Assembly.LoadFile("程序集路径");
            foreach (Type t in asm.GetTypes())
            {
                foreach (MethodInfo mi in t.GetMethods(BindingFlags.Static | BindingFlags.Public))
                {
                    foreach (object obj in mi.GetCustomAttributes(false))
                    {
                        if (obj is DllImportAttribute)
                            Console.WriteLine(((DllImportAttribute)obj).Value);
                    }
                }
            }