C# 似乎应该说是 .NET 的“模块”结果也都还是 DLL 吧?
C# 怎么看到的就是 using 这玩意,和 C/C++ 的 #include 一样,编译期的东西,连那个 DllImport 似乎也是。
动态库没能动起来就是,而只是静态加载动态库。没有看到 LoadLibrary() 及 FreeLibrary() 对应的东西,没看到动态库动起来了。

解决方案 »

  1.   

    我需要的时候 LoadLibrary() ,不需要的时候 FreeLibrary()
      

  2.   

    动态库两种加载方式,一种隐式加载,加载程序时加载,知道进程结束,即所谓静态加载。
    一种是显式加载,也就是需要时用 LoadLibrary() 加载,不需要时可用 FreeLibrary() 卸载。
    难道我这也会理解错,难道我以前写那些 C/C++ 都是错误代码?请楼上指教。
      

  3.   

    好吧,我表达有误。我前面说编译期指的是,动态库的隐式加载,C# 的 using 和 C/C++ 的 #include 都是编辑期指令,都是编译期决定一切。
    我所说的动起来也就是说运行期加载卸载,也就是 C/C++ 中的显式加载。需要的时候 LoadLibrary() 不需要的时候 FreeLibrary() 。
    因为养成了做事擦屁股的习惯,所以对 C# 表示困惑,垃圾收集器也只能处理变量而已,那动态库问题又是怎么解决的?
      

  4.   

    你说的显示只是你自己显示调用了LoadLibrary,using等等编译后也会变成LoadLibrary的,只不过不是你写的代码而已,至于.net是怎么处理dll的你去仔细研究CLR就好了
      

  5.   

    本帖最后由 caozhy 于 2011-06-19 13:23:49 编辑
      

  6.   

    没找到不代表没有参考:AppDomain  
      

  7.   

    想要在用的时候再加载,C# 都是用反射来实现的。Assembly asForm = Assembly.Load("MyTest.Main");
    Type asType = asForm .GetType("MyTest.Main.Form1");MyTest.Main为项目名称
    Form1为要使用的项目下的窗体对象不知道我这么说你明白吗?你想动态的 在你用的时候,去实例你用的动态库,可模仿这个来写
      

  8.   

    C#在添加引用的时候 会自动生成一个类:
    AssemblyInfo.cs
    你自动添加引用,程序自己生成了这个,
    如果你想动态 加载,那就是 把这个类里的东西拿到你 动态加载的地方,也是就反射的应用
      

  9.   

    算了,怎么说诸位都不明白。我习惯那种用时加载,不用时就卸载的感觉,而对 .NET 却并不了解,所以有个心结。
    .NET 无论怎样都有动态模块机制吧?无论叫什么,反正就是这个意思,也就是动态库的那个意思,对应产物。我只想知道 C# 如何卸载它的动态模块。我要的不是 C# 如何加载 *.dll 文件如何卸载 *.dll 文件,而是指它自己的动态模块,它是如何管理的。垃圾收集器我只听过回收变量空间的,想听却没能听到有关回收动态模块(还是不用动态库了,免得又让诸位感觉晦涩)空间的。
    我现在的感觉就像是,我只用一下子的东西老占着我的内存,因为我不确定 C# 是否能自动卸载不用的模块,如果能,它又是什么原理。OS 的缓存机制?我只想到这个可能而不确定的答案。
      

  10.   

    http://msdn.microsoft.com/zh-cn/library/system.appdomain%28v=vs.80%29.aspx
    这才是我要的答案
      

  11.   

    建议LZ去看看JIT的运行方式。你说的手动卸载可能是通过垃圾回收的形式做的?还真没研究过