请教一个指针的问题?(100分)

  • 主题发起人 主题发起人 zhjwjan
  • 开始时间 开始时间
Z

zhjwjan

Unregistered / Unconfirmed
GUEST, unregistred user!
我在dll里写了一个函数
function getmsgs(var p: pchar): integer;
begin
getmem(p, 100);
result:=100;
end;

在引用这个dll的getmsgs时是这样的:
procedure usedll;
var
p1: pchar;
begin
getmsgs(p1);
freemem(p1);
end;
执行到freemem(p1)时出错:“invalid pointer operation"。
请问这是怎么回事?
 
p1没有分配空间吧。。
getmem(p1)
 
不太了解,不过前段时间我也遇到一些这样的问题
size:=getpath(canvas.handle,ppoo^,pb,0);
getmem(ppoo,sizeof(tpoint)*size);
getpath(canvas.handle,ppoo^,pb,size);
ppo:=ppoo;
caption:='';
for i:=0 to 4 do
begin
caption:=caption+inttostr(ppoo^.x)+':'+inttostr(ppoo^.y)+':';
if i<4 then
inc(ppoo,1);
end;
ppoo:=ppo;
freemem(ppoo);
这里,如果我不用ppo把ppoo的地址保存下来,在freemem的时候再置回来的话,
“invalid pointer operation”
 
mikegong? 你是轩吗?
 
to:xiao_min,我在procedure usedll;中没做任何修改指针的动作啊,程序就是那么简单的,
我没保留任何代码。你修改了指针肯定要找一个变量来记住的。
 
在主程序和DLL的uses单元中加上ShareMem
 
mikegong就是我了。。无聊最近,暂时没有什么项目,都在这里看看玩玩了。
 
用sharemem是可以,不过要再发布一个delphi自带的一个dll,这样不大好。后来我想了
一下,觉得先分配好空间,再传指针入dll,出来后释放空间。这样会好点。
function getmsgs(p: pchar): integer;
begin
//assign values to the memory p points to
result:=100;
end;
procedure usedll;
var
p1: pchar;
begin
getmem(p1, 100);
getmsgs(p1);
freemem(p1);
end;

不好意思,大家没分拿了。
 
多人接受答案了。
 
后退
顶部