内存分配问题,高手请进!(100分)

  • 主题发起人 主题发起人 冰火
  • 开始时间 开始时间

冰火

Unregistered / Unconfirmed
GUEST, unregistred user!
我遇到以下问题,请高手解答:<br>我在Delphi的一个应用程序中调用一个我用Delphi开发的DLL中的函数,传递一个String进去,<br>我需要在该DLL中扩展该String的长度,改写其内容,然后安全地传出。<br>请各位解答,需要两方面的代码(应用程序端和DLL端)
 
没有人能答么?版主们请看一看。
 
用pchar<br>不就解决了吗,<br>还可以和c互相调用
 
在DLL编程中一般使用PChar和Shorstring来传递字符串信息(避免使用Borlanmm.dll,其实<br>就是避免uses ShareMerm单元)<br>将string转化成PChar可以如下:<br>var str:string;<br><br>&nbsp; setlength(str,256);//一定要给str分配空间<br>然后就可以用PChar(str)去做你的参数了,因为pchar(str)就是一pchar<br>扩展string的长度可以用setlength呀<br>扩展pchar的长度可以用strlen()<br>例如strlen(s,256);<br>不知道这是不是你想要的
 
varstring最好!
 
我用String也没什么问题呀。
 
哦,<br>ShortString 255 characters 2 to 256 bytes backward compatibility<br>AnsiString &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;~2^31 characters 4 bytes to 2GB 8-bit (ANSI) characters<br>WideString &nbsp; ~2^30 characters 4 bytes to 2GB Unicode characters; <br><br>看你STRING的内容有多少了,如果就这么点当然不会出问题!呵呵<br>
 
不好意思,各位,这段时间忙别的事情去了。<br>这个问题我已经解决了,用Delphi嵌入汇编解决的,只要两行代码就搞定了。<br><br>事实上我没有把问题说清,怪我,呵呵。<br>这个DLL有可能是别人写的,所以有些地方是超出了我的控制的。<br>在DLL中改变传入参数(Buffer)的大小是会出错的,尤其是用C写的DLL。<br>不管是在DLL总重新分配一段内存还是改变原来内存的大小,这也是C在传入Buffer时<br>一定要另传一个长度值的原因,请各位明鉴。<br><br>不管怎样,非常感谢大家的帮助。<br>最近上网不大方便,耽误了大家取分,抱歉。<br>以后我会抽机会常来的,也请大家多帮忙,大家共同进步。<br>谢了。
 
后退
顶部