51Testing软件测试论坛

标题: 从QTP 中调用DLL库中的Function遇到的问题! [打印本页]

作者: xjmen    时间: 2006-7-25 19:17
标题: 从QTP 中调用DLL库中的Function遇到的问题!
不知道你们从DLL 库中 调用里面的function时候 用到 micByRef参数没有:
‘VB中的声明方法
'Public Declare Function ConnectDatabase Lib "fbdll4vb20.dll" (ByVal servername As String, ByVal dbn
ame As String, ByVal username As String, ByVal password As String) As Boolean

'Public Declare Function ExecuteSelect Lib "fbdll4vb20.dll" (ByVal dmlCommand As String, ByRef retVal As String, retlen As Long) As Long

’QTP里的声明方法
Extern.Declare micInteger , "ConnectDatabase", "c:\fbdll4vb20.dll", "ConnectDatabase", micString , micString, micString , micString

Extern.Declare micInteger , "ExecuteSelect", "C:\fbdll4vb20.dll", "ExecuteSelect", micString , micString +micByRef , micInteger +micByRef

‘调用部分
。。。。

    Dim rv
    Dim rcount
    Dim rlen
    Dim result
    Dim xmldoc
    result = Space(1)
    rv = Extern.ConnectDatabase("localhost", "c:\NRM5.GDB", "SYSDBA", "masterkey")
    rcount = Extern.ExecuteSelect("SELECT name  FROM profiles where id =1", result, rlen)
。。。。
   
    结果:
    rv =1 这个说明 ConnectDatabase 成功,但是 在调用ExecuteSelect,也就是Select的结果 写回到 result 或者 rlen的时候,系统报错“General Error”。
   
    我比较头痛,对 micString +micByRef 换了各种类型都无济于事,查过Mercury KnowledgeBase
那里面的例子也没什么特别的。另外发现调用DLL里的function对于QTP时比较危险的,很容易就会造成整个QTP系统Crash掉。
    这条路走不通 我只能换办法了,呵呵!
作者: jbmw_dzg    时间: 2006-7-26 01:38
我也碰到了同样的问题
一个自己写的VB ActiveX dll,在vb里面调用没有问题,但是一旦到QTP
连SET obj=createobject("Progid")这样都出错了,简直晕倒了
作者: xjmen    时间: 2006-7-26 09:37
不知道 你是不是 按照网上 教的办法 编译的DLL,我 最后没办法 自己把函数包装在VB ActiveX dll里调用,结果一到调用函数的地方 QTP 就Crash了
作者: jbmw_dzg    时间: 2006-7-27 02:12
关于vb写的Activex dll,我已经解决了我碰到的问题,虽然解决的原因我也摸不清楚到底是为什么,但是至少解决了

不过说到c++写的dll,我就跟郁闷了,一个好好的dll,在WR调用工作正常,可是在QTP里面去一点用都没有
没法工作,郁闷呀
难道就是因为是用BCB写的吗




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2