Re:ufo! 调用ActiveX问题 ( 积分: 100 )

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

wglifs

Unregistered / Unconfirmed
GUEST, unregistred user!
使用一个ActiveX,是用Import Type Library功能吗?在单元中怎样引用?VB的代码如下,怎样改成Delphi的代码?
Public BtApp As BarTender.Application
Public BtFormat As BarTender.Format
Sub PrnLbl()
Set BtApp = CreateObject("BarTender.Application") 'Call BarTender
Set BtFormat = BtApp.Formats.Open(gPrnFName) 'Call label format file
BtFormat.SetNamedSubStringValue "TCustNo", gCustNo
BtFormat.PrintOut
BtFormat.Close (BarTender.BtSaveOptions.btDoNotSaveChanges) 'Close label format
BtApp.Quit 'Exit BarTender
End Sub
 
如果是ole对象,无需引入库就可以使用的,直接创建对象。我已经在你原先的那个帖子上回复了,你可以看看:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3717963

如果对方提供有dll或者tlb文件,你可以试试Import Type Library,然后点击 create unit。delphi会生成 XXX_tlb.pas文件,引用这个单元文件后就可以使用类了。如下例:
使用一个创建pdf文件的dll库的情形,我没有你的那个打印库文件,不知其类名,所以无法给出示例。但应该和下面的代码使用方法类似。
procedure TForm1.Button2Click(Sender: TObject);
var ttt: TpiPDFDocument; //来至导入的库文件的类型

begin
ttt:= TpiPDFDocument.Create(self); //创建类实例
ttt.StartEngine('',''); //调用类方法
ttt.FileName:= 'e:/samTest.pdf';
ttt.BeginDoc;

ttt.EndDoc;
hhh.Free;
ttt.Free;
end;
 
Re:ufo! 我的那个库文件在 http://www.hybarcode.com/d_file/bartender.rar 可以下载,麻烦你看看,倒底应该调用,万分感谢!
 
ok,你先 Import Type Library the BarTender.tlb file。
然后 uses 刚刚创建的单元
然后,试试下面的代码
procedure TForm1.Button2Click(Sender: TObject);
var ttt: TApplicationProperties; //来至导入的库文件的类型

begin
ttt:= TApplicationProperties.Create(self); //创建类实例
ttt.Formats.open('filename');//调用类方法
ttt.Formats.SetNamedSubStringValue('TCustNo', gCustNo);
ttt.Formats.PrintOut;


ttt.Free;
end;
 
来至导入的库文件的类型那里会出现错误,能否下载那个文件,给出一点具体吗?谢谢!
 
只一个tlb文件不行啊,tlb文件只是用来描述某个dll的接口的。
你还需要有相应的dll并且注册过(可以调用regsvr32来注册)
另外,如果你tlb和dll文件都有,而且dll也注册了,这个导出的tlb文件还是不能编译,提示有错误,那么还可以试试扔掉这个下载的tlb文件,直接用dll文件来导入并 create unit,也许这样能解决错误。
 
还有一个,上面的代码,我那个双斜杠打成了全角的了。你删掉双斜杠和注释看看,是不是这里报错?
 
把注释删除都不能编译,我已经将那个tbl注册成了ActiveX控件了,应该也可以搞好吧.但是刚刚试了一下,还是有点问题,能否帮忙在线看看.我的QQ是 329636232 MSN: wglifs@hotmail.com
 
老兄 BarTender.tlb 文件没有提供具体的功能的,只是一个为了便于其他编程语言调用他们提供的dll而设置的一个接口描述文件而已,因此你需要下载或者安装了相应的能提供具体功能的dll才行的。
TLB是.idl的编译后形式,作为.h的替代品。由于delphi没有.h文件(是.pas),所以需要一种语言中立的东西来定义接口。然后delphi根据这个tlb文件能生成.pas文件,来定义接口和类型。
但具体的功能,是通过调用接口GUID,操作系统根据这个guid在注册表内找到相应的dll文件(或者exe文件,看是进程内com还是进程外com),然后通过dllhost(COM+)或者rundll32之类的加载进来。
你的错误是不是相应的注册表guid下没有找到具体的dll文件吧。
 
学艺不精啊,这个程序马上就要投入使用了,就是凑在这里了,能否远程协助一下啊?我加你的QQ或者你加我的QQ都行的.
 
接受答案了.
 
后退
顶部