关于DELPHI编写的DLL在VB中调用的问题?? (50分)

  • 主题发起人 goodbegin
  • 开始时间
G

goodbegin

Unregistered / Unconfirmed
GUEST, unregistred user!
我用DELPHI做了个DLL,再DELPHI中调用正常,在VB中则无法正常调用,下面是我的DLL中的一个函数
procedure ShowTest(AHandle:THandle);
var
DLLFRM:TForm1;
begin
Application.Handle:=AHandle;
DLLFRM:=TForm1.Create(Application);
DLLFRM.Caption:='abc';
end;

在VB中调用出错。我改成下面的代码后又执行正常
procedure ShowTest(AHandle:THandle);
begin
Application.Handle:=AHandle;
end;

说明问题在显示DLLFRM上。该如何解决这个问题,请高手指点,谢谢!!
 
你的
var
DLLFRM:TForm1;
是局部变量,退出函数时就不存在了。
 
但用DELPHI工程调用就可以,这是为什么?
 
可能兼容性问题,请问你在VB和delphi中分别是怎么调用的?
 
在VB中声明函数:
Private Declare Sub ShowTest Lib "C:/DLL/Test.DLL" (ByVal Handle As Long)
执行语句:
ShowTest (App.hInstance)

DELPHI中就和书上的一样
 
试试:
procedure ShowTest(AHandle:THandle);
var
DLLFRM:TForm1;
begin
Application.Handle:=AHandle;
DLLFRM:=TForm1.Create(Form1);
DLLFRM.Caption:='abc';
end;
 
没有用,还是老问题!是否有调试成功的例子???
 
我想是handle问题,你用api函数获得handle试一下
api函数是:GetModuleHandle()
具体请看帮助
我遇到过类似问题,最后用这种方法才搞定
 
有具体的例程吗?是DLL写的不对还是调用端写的不对?
 
是DLL写的不对
我的程序为了得到dll本身的句柄,是这样调用的,
handle:=GetModuleHandle('mydll.dll')
你的程序可能就在传参数上有所区别,具体要靠你多次测试试出来了,因为帮助也说的不是很清楚
我也是靠多次实践才得出这种正确方法的
 
我现在不传递Handle则可以建立窗体了,但是我定义的两个参数类型WideString从VB中传递过来后就不对了。例如
在VB中定义A为String,A=“张三”,传给函数后,在显示的界面上是乱字符,该将参数定义成什么类型才能正常传入?
 
vb传string参数给delphi时,delphi要声明为char*类型
 
procedure ShowTest(AHandle:THandle);
var
DLLFRM:TForm1;
begin
Application.Handle:=AHandle;//你把VB的工程的句柄传了过来
DLLFRM:=TForm1.Create(Application);//VB的工程和Delphi的工程不一样,不能然它成为拥有者。把Application换成Nil
DLLFRM.Caption:='abc';
end;
 
顶部