c#如何释放非托管dll,调用方式是[DllImport("mydll.dll")]

解决方案 »

  1.   

    这个问题是在用c++做的dll时,每次修改dll的代码时原来的就删不掉,要等垃圾回收器回收了才能删除,要等个几分钟吧,这样浪费时间也比较麻烦,找了一些资料,说是可以用Finalize方法的,可是看了资料还是不懂!
      

  2.   

    程序关闭就自动释放了。如果dll提供了一些释放资源的函数,那么在析构函数或者Dispose中调用
      

  3.   

    删除时,提示说“无法删除mydll,访问被拒绝”,估计原因就是资源没有被释放
      

  4.   

    dll是c++做的,用来做web项目,都关了也没有用,重起有用!
    c++的代码:#pragma argsused
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
    {
            return 1;
    }
    //---------------------------------------------------------------------------
    extern "C" __declspec(dllexport) void __stdcall Calc() //导出函数
    {
            printf("Content-Type: text/plain;");
            printf("987654321");
    }
      

  5.   

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Runtime.InteropServices;namespace WebApplication1
    {
    /// <summary>
    /// WebForm1 的摘要说明。
    /// </summary>
    /// 
    public class WebForm1 : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.Button Button1; protected System.Web.UI.WebControls.TextBox result; [DllImport("mydll.dll")]
    public static extern void Calc();
    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    Response.Write("---------");
    Calc();
    Response.Write("<br>");
    result.Text="56";
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.Button1.Click += new System.EventHandler(this.Button1_Click);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
       
    }}
      

  6.   

    web项目...你要停止IIS,然后再任务管理器中终止asp_net.exe(好像是)
      

  7.   

    程序中是无法释放的,因为是static的
      

  8.   

    任务管理器里,没有
    ============停止IIS服务,然后再任务管理器中终止aspnet_wp.exe.这样就可以删除了。如果你是用vs2005调试的,那么终止asp.net development server
      

  9.   

    试试
    Marshal.ReleaseComObject();
      

  10.   

    我的任务管理器里没有aspnet_wp.exe这个进程!
    另外Marshal.ReleaseComObject();是对com对象有用,试过了不行,不知道还有没有另外的方法,下面两个网址都介绍了Finalize的方法释放资源,可以不理解怎么搞? 高人可以指点下吗?
    http://blog.csdn.net/mlks_2008/archive/2007/06/01/1633892.aspx
    http://www.cnblogs.com/Laeb/archive/2007/02/05/640956.html