O
onedot
Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个函数是调用第三方的DLL文件,里面一个函数接受2个参数,其中1个是返回参数<br>还有一个返回值。它们都是字符型。考虑到通用,都使用PCHAR来调用(PWINDCHAR也许更好)<br>在DELPHI里定义函数如下<br>Function my_call(const ASend char,var AReturnchar)char;stdcall;<br>.....<br><br>但我在一个地方调用这个函数怎么写才是对的?<br>procedure TForm1.Call;<br>var Lsend,LReturn,LResultchar,<br>begin<br> GetMem(Lsend,512);<br> GetMem(Lsend,512);<br> GetMem(Lsend,512);<br> ....//给Lsend一个初始值<br> ....<br> LResult:=My_call(LSend,LReturn);<br> FreeMem(LSend);<br> FreeMem(LReturn);<br> FreeMrm(LResult): <br>end;<br>为什么老是在FREEMEM时会出错,如果不做FREEMEM也出错,但如果不调用那个函数,倒是没错误<br>但为什么我调用了后就不能对这些PCHAR做FREEMEM?奇怪的是如果我调用这个函数,哪怕是<br>在Freemem(LSend)前做Freemem任何一个和该函数无关的PCHAR变量都会出错!<br><br>但如果是:<br>var Lsend,LReturn,LResultchar,<br>begin<br> Lsend;=pchar(Astr);<br> LReturn:=pchar(AReturn); ....//给Lsend,LReturn一个初始值<br> AResult:=My_call(LSend,LReturn);<br> //AResult,Astr,AReturn都是字符串变量<br>end; <br><br>这样是不会出错,我知道DELPHI里字符串的资源是系统自动释放的<br>所以这些地方对那些PCHAR不用FREEMEM<br>但我还是不放心我写的是否会造成资源有被泄露的??<br>那么全部使用PCHAR直接写该怎么写?<br><br><br><br>