我自定义了一个DLL,在DLL函数为
procedure getNewchar(instr:pchar;var outstr:pchar);
begin
getmem(outstr,32);
copymemory(outstr,instr,32);
//这里没有释放
end;在另外一个程序调用DLL如下:
procedure test();
var
a:pchar;
begin
getNewchar('123456',a);
edit1.text:=a;
freemem(a);//???此处出错
end;
为什么我在DLL内部分配的内存在外部释放会出错???
procedure getNewchar(instr:pchar;var outstr:pchar);
begin
getmem(outstr,32);
copymemory(outstr,instr,32);
//这里没有释放
end;在另外一个程序调用DLL如下:
procedure test();
var
a:pchar;
begin
getNewchar('123456',a);
edit1.text:=a;
freemem(a);//???此处出错
end;
为什么我在DLL内部分配的内存在外部释放会出错???
解决方案 »
- 问一个简单问题;
- 请高手指点: 如何调用windows默认的打印机属性对话框。 sorry...分用光了
- 如何从一串字符串的最后找指定的文字?
- 怎么在视频的窗体上显示时间?或其它文字?
- adsl 申请了固定的IP地址,分公司全部上了宽带,老板用GRPS 移动上网 用SCKTSRVR.EXE这种方式进行连接远程可以访问吗?
- 如何解决这个问题:用opendialog和savedialog备份单机版数据库文件,打开的源文件有两个(假设db1,db2),而目标文件只有一个(db1),这是
- Delphi2007中如何在显示登陆界面时任务栏上显示应用程序
- Undeclared identifier: 'TSslHttpCli',奇怪的问题
- 如何在2000中删除一个正在使用的文件
- 简单问题,总是出错,用read读文本文件,为什么...
- 在DLL中用GETMEM 申请的内存,在调用完DLL后会不会自动释放??
- delphi高手帮忙啦!我用一个dpr文件(工程文件)写的窗口要如何显示在另外一个Form的panel中呢?
你最好把DLL和EXE看做两个不同的对象
谁分配谁释放,在DLL里分配的,就得在DLL中释放,而不要让EXE代劳
加上ShareMem来释放内存就不会有问题了