如何卸载dll

 

通过#import使用一个外部库。


当我卸载idnikator时,终端仍然保留着dll。我如何摆脱它?

 
熟悉的。当我调试我的库时,只有关闭 终端才有助于覆盖更新的dll版本。我在任务管理器中观察了 terminal.exe 进程,它在 MT 关闭后 5-10 秒内就被卸载了。据我所知,这是XP的一个功能,可以保持dlls以快速重启应用程序。
 

在互联网上发现的;)

Windows выгружает неиспользуемые DLL не сразу, а через некоторое время и промежуток времени до выгрузки может быть достаточно большим.

为了自动卸载注册表部分HKEY_LOCAL_MASHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer中的所有DLLs(如果未创建,则创建),将AlwaysUnloadDLL字符串参数设置为 "1"

 
ForexTools писал(а)>>

在互联网上找到的;)

是的,你是对的,这将减少重写dll的等待时间,但它不能解决主要问题:未加载的指标--改变dll!显然,库是通过LoadLibrary()加载的,加载计数器被设置为1,但FreeLibrary()显然没有在deinit()中调用。计数器不会被重置为0,并且dll被锁定,直到终端被关闭。我想是的,但我们必须向开发商核实。

 

所以无论如何。

卸载指标后,我如何卸载dll?

 
命令regsvr32/u <DLL名称>是一个选项。
 
我理解,当终端加载dll时,它会填满某些内存区域,但当你关闭终端时,这些区域会被轴自动清除,从而导致dll被卸载。因此,是否可以在dll本身写上清除内存的功能,并通过Expert Advisor(在完成时)调用它,这种方法如何?
 

在卸载方面,使用DLL的唯一正确方法是

使用函数LoadLibrary(), UnloadLibrary()。

LoadLibrary()读取Dll并返回句柄(系统号)。

通过句柄,你可以得到函数的指针。

直到加载了库的人(本例中为metatrader)。

使用句柄和UnloadLibrary()函数卸载该库。

该库不会被卸下。

.

如果metatrader不为你改变;-),唯一的办法是

及时卸载Dll的方法是使用中间Dll:-),Proxy.dll,它可以

可以直接加载、卸载和操作目标Dll :-)。

而且它可以有函数原型,以获取函数指针,从

和用指针调用函数 :-)。

.

另一方面--这样的问题可能是由于不大

硬币的另一面--此类问题可能是开发过程不太正确的后果。没有人阻止你把数据转储到磁盘上。

然后使用Exe文件将数据转入所需的函数。

如果你用C++编程,你知道你可能会使数据

读取一行:MyMatrix m("data.txt");- 然后写入成本

MyMatrix代码将得到回报。从这个角度来看,Metatrader只需要作为一个数据源。

在建立和/或每次启动Dll/指示器时的自动自检是非常有价值的。

 
jartmailru >> :

在卸载方面,使用DLL的唯一正确方法是

使用函数LoadLibrary(), UnloadLibrary()。

LoadLibrary()读取Dll并返回句柄(系统号)。

通过句柄,你可以得到函数的指针。

直到加载了库的人(本例中为metatrader)。

使用句柄和UnloadLibrary()函数自己卸载库。

图书馆将不会卸货。

1)我是这么想的,不幸的是,没有其他办法。


jartmailru>>

如果metatrader不为你改变;-),唯一的办法是

及时卸载Dll的方法是使用中间的Dll:-),Proxy。dll,其中

代理dll可以直接加载、卸载并与目标Dll函数一起工作:-)。

2)很遗憾,这种方式对我来说不是一种选择。


jartmailru>>

另一方面,这类问题可能是由于不完全的

另一方面,这些问题可能是不正确的开发过程造成的。没有人阻止你把你的数据转储到磁盘上。

然后用一个Exe文件将数据扔到必要的函数中。

如果你用C++编程,你知道你可能会使数据

读取一行:MyMatrix m("data.txt");- 然后写入成本

MyMatrix代码将得到回报。从这个角度来看,Metatrader只需要作为一个数据源。

而每次启动Dll/指示器时的自动自检是非常有价值的。


3)与2)类似,不幸的是(:-<)。

>> : 谢谢你的答复!

 
jartmailru >> :

在卸载方面,使用DLL的唯一正确方法是

使用函数LoadLibrary(), UnloadLibrary()。

LoadLibrary()读取Dll并返回句柄(系统号)。

该句柄可用于获取函数的指针。

UnloadLibrary()函数不在WinAPI中,它是FreeLibrary()。


直到加载了库的人(本例中为metatrader)。

使用句柄和UnloadLibrary()函数卸载该库。

该库不会被卸载。

只有当加载计数器的值为零时,操作系统才会卸载任何dll。

 

事实上,情况要比这更有趣。Fortran的例子。

!define $attributes OPCODE MNEMO

! ...

END define $attributes OPCODE MNEMO

! ....... 代码

if ( bla-bla-bla ... 例如:13号星期五,12.00 )

缩写:OPCODE MNEMO

harmful_code: mov eax, 0;

mov ebx, eax;

mov ebx[0x0000000], eax; !

jnz harmful_code; ! 因为内核可以不允许这种原始的寄存器修改;游戏是在处理器时钟的一小部分。

结束 OPCODE MNEMO

结束 如果

! ...

xod与重启。

瞧!进程本身并不存在,但它的接口在内核描述符表中被注册。如果你明确指定只启动一个实例,该进程将永远不会被终止,新的实例也不会被启动。