如何用QTP处理dll中带有枚举类型返回值的函数

发表于:2009-5-19 11:48

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:pcl2004_27    来源:51Testing博客

  收到一封学员关于用qtp处理dll中带有枚举型返回值函数的问题,这里是给他的一个答复。

  问题描述:

  我用QTP 调用VC 编写的dll (extern c 编译)

MXDSGC_API MXD_RTN_CODE_E SGC_InitWinsock(void);
/*!
 * This function is used to close windows socket port.
 * \param
 *         void
 * \return
 *         Return code by MXD_RTN_CODE_E enumeration.  
 */

  我在QTP中应该如何调用?

  extern.Declare micUInteger

  ,"SGC_InitWinsock","D:\Share\MA\SiggenControl\sgc.dll","",micVoid

  如果返回值是枚举型,在QTP中用什么返回呢?

  回答:关于qtp调用dll返回的是枚举型函数的问题,其实只要把返回值设置成MicInteger类型就可以,我写了一个例子请看下:

  在vc中编写了一个带有枚举型返回值函数的dll,lib.h中代码如下:

  enum color
{red,yellow,blue};

#ifndef LIB_H
#define LIB_H
   extern "C" color __declspec(dllexport)getcolor();
#endif
  lib.cpp中代码如下
  #include "lib.h"
color getcolor()
{
 color c_1;
         c_1=red;
 return c_1;
}

  以上代码纯为了说明问题,vc6中编译通过。

  QTP中调用代码:

Extern.Declare micInteger,"getcolor","D:\VC\dll\Debug\dll.dll","getcolor"
Dim iColorResult
iColorResult=Extern.getcolor()
If iColorResult =0 Then
    msgbox "red"
End If

If iColorResult =1 Then
    msgbox "yellow"
End If

If  iColorResult =1 Then
 msgbox "blue"
End If

  以上代码在qtp10中调式通过。

  这里关键是vbs是无类型的编程语言,所以不能和c语言中的类型进行匹配,如我们会在vb中声明同类型的变量更替它,vb中的调用代码如下:

Private Declare Function getcolor Lib "D:\VC\dll\Debug\dll.dll" () As color

Private Enum color
  red
  yellow
  blue
End Enum

Private Sub Command1_Click()
  Dim iColorResult  As color
  iColorResult = GetColor()
  MsgBox iColorResult
End Sub

  可以在vb中声明替代枚举型变量,与c中的枚举类型相匹配。

版权声明:原创作品,转载时请务必以超链接形式标明本文原始出处作者信息本声明,否则将追究法律责任。 本文出自pcl2004_27的51Testing软件测试博客:http://www.51testing.com/?72

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号