dll调用出错,请高手帮忙诊断(30分)

  • 主题发起人 主题发起人 dnewb
  • 开始时间 开始时间
D

dnewb

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了个简单的dll静态调用程序,运行时系统提示错:<br>library device1;<br>uses<br>&nbsp; ShareMem,<br>&nbsp; SysUtils,<br>&nbsp; dialogs,<br>&nbsp; Classes;<br><br>{$R *.res}<br><br>function my1proc(buf: string):String; stdcall;<br>var<br>&nbsp; mybuf: string;<br>begin<br>&nbsp; &nbsp;mybuf:=buf;<br>&nbsp; &nbsp;delete(mybuf,1,3);<br>&nbsp; &nbsp;Result:=mybuf;<br>end;<br><br>exports my1proc;<br><br>begin<br>end.<br>以上是DLL程序<br>下面是主程序<br>function my1proc(buf: string); string; stdcall; external 'dlltest.dll'<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>&nbsp; &nbsp;//在edit1中输入一串字符, 调用DLL中的函数,将字符串的前3个字符删除,返回结果串<br>&nbsp; &nbsp; label2.caption:=my1proc(edit1.Text);<br>&nbsp; &nbsp; edit1.Text:='';<br>&nbsp; //系统在此处提示错误:Invalid Pointer Operation.<br>&nbsp;end;<br><br>错误现象: 当字符串少于4个字符,即处理后返回空串,程序运行正常,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 当字符串多于4个字符,即处理后返回一个非空子串,程序报错:Invalid Pointer Operation<br><br>
 
把字符串string类型改为PChar类型的试一下。
 
DLL程序是WIN程序,并不是DELPHI的程序,自然DLL程序要按WIN程序的定义。<br>将上面两处String更为PChar。
 
明显的是内存错位了,应该是你的Delete函数搞的鬼,你可以试试用<br>mybuf = copy(buf, 3, length(buf) - 3);<br>应该好使<br>
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
827
import
I
后退
顶部