调用VC编的DLL在回传值使的问题???(100分)

  • 主题发起人 主题发起人 wangchaomin
  • 开始时间 开始时间
W

wangchaomin

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手:
小弟在调用一个VC编的dlL时出现问题如下:
此函数有4个PCHAR的参数和一个指向LONGWORD的指针参数,返回一个LONGWORD
所有参数其实都为参数回串,而传送pchar变量,或变量地址都不能返回值,
一引用PCHAR参数就出现异常,‘ACCESS violation at address 00493d0b’请各位高手
指点一二,特敬上百分请笑纳

DWORD apiDeliver(char* szCalled,char* msg,char* time,char* dstnum,DWORD* restmsg);
//api 原型


代码:
deliver:function(var called:pchar;var msg:pchar;var time:pchar;var dstnum:pchar;restmsg:pointer):LONGWORD;cdecl;
var
  aa,bb,cc,dd:pchar;
  flag,count:longword;


 begin
 flag:=deliver(aa,bb,cc,dd,@count);
    showmessage(aa)
  //此时出错
 
deliver:function(called:pchar;msg:pchar;time:pchar;dstnum:pchar;restmsg:pointer):LONGWORD;cdecl;
如果不行就是
deliver:function(called:pchar;msg:pchar;time:pchar;dstnum:pchar;restmsg:pointer):LONGWORD;stdcall;
 
在调用前,对 aa 分配了空间吗?
 
tseug:
我觉得不是调用方式的问题,我其它函数都是折么调用的。而且我试了一下你的方法也不行

jsxjd:
pchar在delphi中是不是动态分配的呀?我给参数初值也不行 ,
您能不能说一下分配空间的方法谢谢!
 
DWORD apiDeliver(char* szCalled,char* msg,char* time,char* dstnum,DWORD* restmsg);
>>
function apideliver(szCalled,msg,time,dstnum:pChar;var restmsg:Longword):longword;cdecl;
 
szCalled:pchar;
GetMem(szCalled,100);
FillChar(szCalled^,100,0);
这里你就可以使用了
freemem(szCalled);
 
呵呵, 给抢了
 
我试过了,还是不行,错误一样,
张无忌我可以把程序给你讲一下,电话是:84990833-222
 
你的 aa 不能象下面那样声明吗?

aa:array[0..100] of char;
 
你把每个参数都用下面的方法声明, 然后调用看看
var
szCalled : array[0..255];
msg : array[0..255];
dstnum : array[0..255];
restmsg : cardinal;
begin
....

用张无忌的
function apideliver(szCalled,msg,time,dstnum:pChar;var restmsg:Longword):longword;cdecl;
或者
function apideliver(szCalled,msg,time,dstnum:pChar;var restmsg:Longword):longword;stdcall;

 
谢谢各位前辈
改成数组后正常,可否解释一下我的错误。我必须先静态发配,为什么用pchar动态分配不行能?
 
后退
顶部