Dll的问题!急!!!!!!!!!!!!!(200分)

  • 主题发起人 主题发起人 SmileSnake
  • 开始时间 开始时间
S

SmileSnake

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Delphi编了几个Dll。为了叙述方便,我把dll分成两类。<br>A和B,A中的一个函数动态调用B类动态连接库,用到了<br>LoadLibrary 和 FreeLibrary ,<br>A中用了这样的语句调用<br>var<br>&nbsp; HDllInst: THandle;<br>&nbsp; FPointer: TFarProc;<br>begin<br> Result := '';<br>&nbsp; HDllInst := 0;<br>&nbsp; try<br>&nbsp; &nbsp; try<br>&nbsp; &nbsp; &nbsp; HDllInst := LoadLibrary(PChar(DllFile));<br>&nbsp; &nbsp; &nbsp; if HDllInst &gt; 0 then<br>&nbsp; &nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; &nbsp; FPointer := GetProcAddress(HDllInst, PChar(FuncName));<br>&nbsp; &nbsp; &nbsp; &nbsp; if FPointer &lt;&gt; nil then<br>&nbsp; &nbsp; &nbsp; &nbsp; begin<br> &nbsp;//调用该函数<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TCreateTableSQLFunc(FPointer)(...);<br> &nbsp;//TCreateTableSQLFunc是一个函数类型。<br>&nbsp; &nbsp; &nbsp; &nbsp; end;<br>&nbsp; &nbsp; &nbsp; end;<br>&nbsp; &nbsp; except<br>&nbsp; &nbsp; &nbsp; Result := '';<br>&nbsp; &nbsp; end;<br>&nbsp; finally<br>&nbsp; &nbsp; if HDllInst &gt; 0 then<br> FreeLibrary(HDllInst);<br>&nbsp; end;<br><br>这样是不是会把所有的资源都释放?<br>我用的是safecall。<br>谢谢!!!<br>
 
好像没有什么错误噢。
 
会正确释放资源。<br>如果内层保护触发异常,会被内层的 except 捕获,外层的 finally 仍会正确执行!<br>不过你的返回值这样写是不是有点问题(我没有这样写过)?因为存在内存分配的问题。
 
谢谢各位帮忙,分数我已经给了。<br>我的问题已经部分得到解决。<br>其实我程序的问题不是出在这儿。<br>给Bakubaku100分<br>&nbsp; JohnsonGuo50分。<br>谢谢两位。
 
多人接受答案了。
 
后退
顶部