动态调用的动态库卸载存在的问题(200分)

  • 主题发起人 主题发起人 jamcky
  • 开始时间 开始时间
J

jamcky

Unregistered / Unconfirmed
GUEST, unregistred user!
各位,我现在做了一个小程序,碰到这样一个问题:使用LoadLibrary()函数打开动态库并正确的加载了,运行非常正常,但是在退出的时候,我调用FreeLibrary()函数清理的时候出现了错误 :EAccessViolation with message 'Access violation at address 0127ec38.Read of address 0127ec38'。要是不调用FreeLibrary()清理就不会出错,这是什么原因?是不是在清理之前需要做一些准备工作?
注:我做了一个测试,非常简单,就只有2个按钮,一个调用LoadLibrary()函数,一个调用FreeLibrary()函数,中间没有作任何工作,当然,动态库它自身做了一些工作,但在静态加载的时候没有错误。
 
如果你使用了string、动态数组、结构、对象、类
在DLL和EXE工程文件中第一个uses ShareMem
 
是使用了动态的数组指针,不过加载了MEMMGR.LIB 也没改善,报一样的错误。
 
动态库中使用了消息句柄的创建AllocateHWnd(WndProc) 把他注释了就没有错误,另外,我再退出的时候有DeallocateHWnd(hWinThreadHandle),那应该如何清理?
 
FreeLibrary()前判断一下
 
to 网中戏
如何判断?判断什么?消息句柄?
 
这个是delphi自身的问题, 用sharemem就可以了。
 
delphi里面是sharemem,在c builder 中是MEMMGR.LIB ,试过了,没有用,我估计是消息窗口的问题,谁处理过这种消息句柄的关闭过程?
 
非常感谢大家,问题解决了
 
后退
顶部