如何用DELPHI写一个可以被VBSCRIPT调用的DLL

jiminzhou8266 2009-08-06 10:41:59
用delphi写了个DLL,用DELPHI调用成功,但现在想用VBSCRIPT调用该DLL该怎么处理呢,我的代码如下:
type
WProperty = record
sWidgetName:ShortString;
nLeft:Integer;
nTop:Integer;
nHeight:Integer;
nWidth:Integer;
sContent:ShortString;
end;
PWProperty = ^WProperty;

function GetCtrInfo(HWnd:THandle;CtrlName:ShortString):WProperty;
var
FHwnd: THandle;
begin
FHwnd := GetFormHwnd();
New(p);
p^.sWidgetName := CtrlName;
Data.cbData := SizeOf(p^);
Data.lpData := p;
if HWnd <> 0 then
SendMessage(HWnd, WM_COPYDATA, FHwnd, Longint(@Data));
result.nLeft:= p^.nLeft;
result.nTop:= p^.nTop;
result.nHeight:= p^.nHeight;
result.nWidth:= p^.nWidth;
result.sContent:= p^.sContent;
Dispose(p);
end;

exports
GetCtrInfo;

DELPHI的调用程序:
function GetCtrInfo(HWnd:THandle;CtrlName:ShortString):WProperty;external 'Project4';
procedure TForm2.btn3Click(Sender: TObject);
var
HWnd: THandle;
t:WProperty;
begin
HWnd := FindWindow('TForm1' ,'待测程序');
t:=GetCtrInfo(HWnd, 'lbl1');
ShowMessage(IntToStr(t.nLeft));
ShowMessage(t.sContent);
end;

最好能给出相应的源码及VBS方面调用的代码,谢谢!!!

...全文
112 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongqi162 2009-08-06
  • 打赏
  • 举报
回复
1、新建工程
ActiveX->ActiveX Library
工程名为Project6
2、添加类
ActiveX->Automation Object,
CoClass Name为MyClass

类名为MyClass


调用
工程名.类名
===>
Project6.MyClass
jiminzhou8266 2009-08-06
  • 打赏
  • 举报
回复
估计是我的MYCLASS写做了,但是又不知道该写什么
gyk120 2009-08-06
  • 打赏
  • 举报
回复
最好不要把代码分散开,写到一个unit里面进行编译
jiminzhou8266 2009-08-06
  • 打赏
  • 举报
回复
已按你的方法尝试,注册DLL提示成功,运行VBS提示ActiveX部件不能创建对象:‘Project6.MyClass’
代码如下:
DLL:
library Project6;

uses
ComServ,
Windows,
Messages,
Dialogs,
Unit6 in 'Unit6.pas' {Form6};

exports
DllGetClassObject,
DllCanUnloadNow,
DllRegisterServer,
DllUnregisterServer;

function GetFormHwnd():Integer;
begin
if Not Assigned(Form6) then
Form6:=TForm6.Create(nil);
//Form4.ShowModal;
//返回创建窗口句柄
Result:=Form6.Handle;
end;

function GetCtrInfo(HWnd:THandle;CtrlName:ShortString):WProperty;
var
FHwnd: THandle;
begin
FHwnd := GetFormHwnd();
New(p);
p^.sWidgetName := CtrlName;
Data.cbData := SizeOf(p^);
Data.lpData := p;
if HWnd <> 0 then
SendMessage(HWnd, WM_COPYDATA, FHwnd, Longint(@Data));
result.nLeft:= p^.nLeft;
result.nTop:= p^.nTop;
result.nHeight:= p^.nHeight;
result.nWidth:= p^.nWidth;
result.sContent:= p^.sContent;
Dispose(p);
end;

{$R *.res}

exports
GetCtrInfo;

begin
end.

VBS:
dim obj
set obj = CreateObject( "Project6.MyClass ")
obj.GetCtrInfo()

请指教!!!
hongqi162 2009-08-06
  • 打赏
  • 举报
回复
你先建一个activex dll工程,把你的dll里面的函数拷贝过去
编译生成MyDll.dll

在E:\test目录下运行regsvr32 MyDll.dll 提示注册成功
同上目录下编辑test.vbs文件,内容如下:
dim obj
set obj = CreateObject( "MyDll.MyClass ")
obj.MyFunc()

5,935

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧