c#如何释放非托管dll

fangge 2007-09-17 04:32:03
c#如何释放非托管dll,调用方式是[DllImport("mydll.dll")]
...全文
449 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljb8664 2012-07-24
  • 打赏
  • 举报
回复
你的这个问题解决了么?
liuyilin888 2009-12-24
  • 打赏
  • 举报
回复
honey52570 2007-09-18
  • 打赏
  • 举报
回复
mark
fangge 2007-09-18
  • 打赏
  • 举报
回复
我的任务管理器里没有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

fangge 2007-09-18
  • 打赏
  • 举报
回复
lovefootball 2007-09-17
  • 打赏
  • 举报
回复
试试
Marshal.ReleaseComObject();
Avoid 2007-09-17
  • 打赏
  • 举报
回复
任务管理器里,没有
============

停止IIS服务,然后再任务管理器中终止aspnet_wp.exe.

这样就可以删除了。

如果你是用vs2005调试的,那么终止asp.net development server
fangge 2007-09-17
  • 打赏
  • 举报
回复
强制清理,但是删除不掉文件
fangge 2007-09-17
  • 打赏
  • 举报
回复
任务管理器里,没有
Avoid 2007-09-17
  • 打赏
  • 举报
回复
程序中是无法释放的,因为是static的
Avoid 2007-09-17
  • 打赏
  • 举报
回复
web项目...

你要停止IIS,然后再任务管理器中终止asp_net.exe(好像是)
shrinerain 2007-09-17
  • 打赏
  • 举报
回复
强制GC.Collect()
Avoid 2007-09-17
  • 打赏
  • 举报
回复
不是资源没释放,而是你的程序没有退出,检查一下任务管理器,看看进程中有没有你的程序。
fangge 2007-09-17
  • 打赏
  • 举报
回复
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

}

}
fangge 2007-09-17
  • 打赏
  • 举报
回复
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");
}
fangge 2007-09-17
  • 打赏
  • 举报
回复
删除时,提示说“无法删除mydll,访问被拒绝”,估计原因就是资源没有被释放
Avoid 2007-09-17
  • 打赏
  • 举报
回复
程序关闭就自动释放了。

如果dll提供了一些释放资源的函数,那么在析构函数或者Dispose中调用
fangge 2007-09-17
  • 打赏
  • 举报
回复
这个问题是在用c++做的dll时,每次修改dll的代码时原来的就删不掉,要等垃圾回收器回收了才能删除,要等个几分钟吧,这样浪费时间也比较麻烦,找了一些资料,说是可以用Finalize方法的,可是看了资料还是不懂!

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧