分配空间问题(10分)

  • 主题发起人 alephant
  • 开始时间
A

alephant

Unregistered / Unconfirmed
GUEST, unregistred user!
我用delphi7编写了个dll给vb调用
分配空间时,getmem(162×sizeof(char)),但vb调用时,将此dll返回的参数的内存空间多了8个
为170个byte
 
把源码贴上

大家共同分析分析
 
function ConnectServer
(const iType:integer;const UID,PWD:pChar;var Rtn:pchar):integer;
var
iUID,iPWD,i:integer;
chRtn:array [0..161] of char;
begin
iUID:=strlen(UID);
iPWD:=strlen(PWD);
if (iUID>15) or (iPWD>15) then
Result:=-1
else
begin
fillchar (chRtn,162,0);
for i:=0 to iUID-1 do
chRtn[i+2]:=(UID);
for i:=0 to iPWD-1 do
chRtn[2+iUID+i]:=(PWD);
chRtn[0]:=#21;
chRtn[1]:=#25;
chRtn[161]:=#0;
Rtn:=allocmem(154);//若使用allocmem(161),在vb调用时就会多7个char
strcopy(rtn,chRtn);//这里用strcopy还是copymemory好
if iType=0 then
Result:=1
else
Result:=iUID+iPWD;
Freemem(Rtn);
end;

end;
 
多分配是正常的,肯定不会少分配的,不够分配是会报异常
Only 10,So ..
 
161-154=7!!!!怎么连算术也忘了???
 
问题是,我编写这个dll的函数,这个时差7个,另外一个函数是差4个。为啥?头疼啊
 
>>将此dll返回的参数的内存空间多了8个
>>为170个byte
你在DLL中分配的内存空间,然后将地址通过返回值传给主程序(VB编写的程序),它怎么会
改动你分配的空间呢??我觉得你概念上好像不太清楚。
 
这个就是我不明白的地方,在VB中我是用动态数组接收Rtn的,但发现动态数组就是
比我分配的多byte。
 
动态数组需要附加空间说明大小的
 
顶部