用delphi调用vc的dll 出问题了,求救!SOS(100分)

  • 主题发起人 主题发起人 huiyue
  • 开始时间 开始时间
H

huiyue

Unregistered / Unconfirmed
GUEST, unregistred user!
dll定义如下
aaa(unsigned char tmode,unsigned long *cnum);
bbb(unsigned char clock,unsigned char data[32]);
我如何才能正确的调用该函数,不知道我是否表达清楚了??
 
表达不清楚,不知道你是不会调还是调用出问题?
 
你的dll定义不完整的,你参考看看
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2468708
 
我在Delphi下调用 这样定义
function aaa(tMode:widechar;var CNum:pinteger):Boolean;
cdecl;far;external 'HYS.dll' name 'aaa';
另外一个我就不知道怎么办了,初次接触dll,还请多多指点
 
你的VC下函数怎么定义的
 
vc下不是我写的,我无法知道
他只给我上面的函数以及参数。不过我试过其他的几个,没有指针的就可以
例如
show(unsigned char stime);
我用function show(stime:longword):Boolean;
cdecl;far;external 'HYS.dll' name 'show';就可以

我不知道怎么处理有指针和数组的和从调用函数中取回数值
 
function aaa(tMode:byte;var CNum:integer):Boolean;
function bbb(clock:byte;data:pbyte):Boolean;
 
我试过了,用byte不行,但是我也重新试了蒋tmod改为longword就可以
不过我还不知道cnum这个指针是不是取得正确的值
还有数组那个,我还没有搞定
 
还没搞定吗?下午忙没回复。
你这样试一试:
aaa(unsigned char tmode,unsigned long *cnum);
aaa(tmode:Pchar; var cnum:LongWord);Boolean;

bbb(unsigned char clock,unsigned char data[32]);
bbb(clock: PChar; data:PChar);Boolean;
在使用时:GetMem(data, 32);//分配空间。用后释放。

Char变量clock也可以不用Pchar变量的。

你先试一试,有问题我们再讨论。
 
那么aaa中的cnum我取到的该是一个地址了,我怎么取得该地址的数值
这样吗?
cnum longword
var cno2:pinteger;cno :longword;
cno :=@cnum//这个地方不对吧,本来cnum表示的就是一个地址,虽然它是longword,现在取地址,那肯定不对吧。
我现在试了,通过了,但是我想不通
cno2:=@cnum;
CNo :=cno2^;
那么其实cno :=GetNoAdd;不也可以吗?《也可以,不过不知道数据对不对》
当然我也用了getmem和freemem了。我发现当用freemen的时候会出错??不明白
 
按你的来解决第二个问题,但是当我用showmessage来查看data的内容时,却出错了。
而且即使我不showmessage,它也照样会出错,只不过是在退出该过程的时候出错,
因为dll是别人用vc编写的,我无从查看,所以也不能找到问题
 
我用pchar会发生错误(执行bbb没有错误,但是使用该句的过程结束后会出现错误),但是用array of byte(且设置长度) 就不出现错误。但取到的值又好像不对
 
后退
顶部