+ -
当前位置:首页 → 问答吧 → 继续提问 asp.net 环境中动态加载 卸载 c# dll 的问题

继续提问 asp.net 环境中动态加载 卸载 c# dll 的问题

时间:2011-12-22

来源:互联网

我想实现一个用插件扩展功能的模块
使用Assembly 反射 调用dll 在网站重启前 不能卸载加载了的dll
这和要求不符

我找到以下代码
C# code

        [DllImport("Kernel32.dll")]
        public static extern IntPtr LoadLibrary(string lpFileName);

        [DllImport("Kernel32.dll")]
        public static extern bool FreeLibrary(IntPtr hModule);

        [DllImport("Kernel32.dll", SetLastError = true)]
        public static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);

            // 加载
            IntPtr hLib = LoadLibrary(Server.MapPath("~/PlugIns/Plugin.dll"));

            //// 取函数地址
            IntPtr ptr = GetProcAddress(hLib, "Plugin.ICarMath");



ptr 一直返回0, 我猜可能是 c# dll 不是标准dll 的原因


请问有什么办法能 达到 动态加载 卸载 的功能?

作者: ayun00   发布时间: 2011-12-22

这样试试呢,Plugin.dll是原生的?
C# code

 IntPtr ptr = GetProcAddress(hLib, "Plugin.ICarMath");
 =>IntPtr ptr = GetProcAddress(hLib, "ICarMath");

作者: dd_zhouqian   发布时间: 2011-12-22

Plugin.dll 是我自己用c#写的

IntPtr ptr = GetProcAddress(hLib, "ICarMath");

我也试过 还是返回0


作者: ayun00   发布时间: 2011-12-22

我不太清楚,c#可以生成托管和非托管?
1.感觉原生的非托管一般用来实现吧
LoadLibrary
GetProcAddress
2.托管只需要项目引用就可以调用了吧。

.net的基础知识比较匮乏,如果引导错了,楼主可别忘记回头啊。算是建议吧,呵呵

作者: dd_zhouqian   发布时间: 2011-12-22

我试着 用c#生成非托管 dll 老是不成功

作者: ayun00   发布时间: 2011-12-22

有没有高人啊

作者: ayun00   发布时间: 2011-12-22

.....求解

作者: ayun00   发布时间: 2011-12-22

相关阅读 更多