VB调用delphi的编写的dll的问题(100分)

  • 主题发起人 主题发起人 netup
  • 开始时间 开始时间
N

netup

Unregistered / Unconfirmed
GUEST, unregistred user!
我用delphi写了一个内含form的dll给vb的程序员共用, 我用delphi调用时好好的, 但
用vb调用就内存出错, 程式关闭.
接口如下:
showform(AppHandle: thandle;
Var RetValue: Pchar);
stdcall;

实现的原理如:
showform(AppHandle: thandle;
Var RetValue: Pchar);
var Form1:Tform1;
begin
application.handle := appHandle;
Form1 := TForm1.create(application);
try
Form1.showmadle;
{我的一些代码不用想这里出错.....}
retvalue := 'this is return value';
finally
Form1.free;
end;

end;

Vb调用: public declare sub showform lib "findclus" (AppHandle as long;
ByRef RetValue as String)

不知为vb写dll还要注意什么总之我在delphi中一切OK, 但Vb就不能调用;
发现:
1. 去掉AppHandle: thandle后可以掉出dll中的form, 但retvalue返回一个Value;
2. 改dll为函数还回一PCHAR型数据与下发现1一样, 在返回时出错, 但FORM可出来.
总之我就是不明白如何不能返回, 没有一点理由的,

再有: vb 在win api时怎么可以返回VALUE, 我试过如CHARLOWER, 我传的是一个BYVAL的
的参数, 为何就跟传地址一样, 变量会变???? 没想清, 小第急用, 请各位帮忙,谢了
 
应该出错的原因在Var RetValue: Pchar,就用String行吗?
这句好象也有点问题:application.handle := appHandle;
 
不管如何, 我都很感谢你
用PCHAR是没有错的.
application.handle := appHandle也是没有错的这样问题我好象是解决了, 但我还对
我上面的问题不理解.
希望有高手能解答.
 
我也用同样的毛病
 
你的dll掉了exports.
 
你犯了和他一样的错误,参考
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2198090
 
你犯了和他一样的错误,参考
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2198090

说明:tseug所说有些问题 StrPCopy(str_mh,'adfkjaf');
1.strpcopy不进行内存长度检测,如果不够就会出错
2.如果在dll内对STR_MH分配内存那么当退出DLL时,内存要FREE掉才好
3.如果在外面对形参分配内存并负责FREE也不方便
所以我认为形参设为VAR传地址,还返回时, 形参 := PCHAR(内部字串变量)是可行的
因为将string cast to pchar DELPHI所做的事情就是将 STRING的内容COPY到形参,这样
形参的内容就改变了,也没ALLOCAMEM &
FREEMEM的麻烦
问题是pchar的类型VB的STRING支持不是很好,有时传到VB后,他后面会有一些空值,用VB的TRIM也截不掉,但只要给VB的EDIT,再从EDIT取值就正常了,这一点我现在也不太明白???
 
后退
顶部