Testpartner 如何调用C++ dll

发表于:2008-04-23来源:作者:点击数: 标签:TestpartnerdllTestPartner
Testpartner 如何调用C++ dll Testpartner是一个非常容易上手的 自动化测试 工具。它的 脚本语言 是 VB A.所以功能上也是非常强大的. 很多人对VB都抱有一定的成见,认为其功能不强,用C++ 开发 才是真材实料.不过这也是仁者见仁,智者见智.我觉得这就像是两种武
Testpartner 如何调用C++ dll Testpartner是一个非常容易上手的自动化测试工具。它的脚本语言VBA.所以功能上也是非常强大的. 很多人对VB都抱有一定的成见,认为其功能不强,用C++开发才是真材实料.不过这也是仁者见仁,智者见智.我觉得这就像是两种武功一样,vb就像是轻功,c++则是内功,各有所强.轻功的特点就是快,vb开发就是快,传说中bill gates总能用vb解决其他人认为不可能用vb解决的问题。所以,对软件应用的人来说技术的多样性恰似条条大路通罗马,我们就是要从中找出最近的那条. 最近,遇到个测试问题,业务上已经用C++来实现,为了能够在最短的时间内使其能够自动化,必须嵌入到TestPartner.这就涉及到如何在vb中调用C++代码的问题。网上资料还是不少的,所以很快就完成了。其中的一个关键就是将C++的函数调用方式改成__stdcall.在vb中写了个测试程序也通过了。但是相同的代码嵌入到TestPartner,就出现了一个错误,“Bad dll calling convention”. 看了一下帮助,还是围绕着函数调用方式这个问题。 Bad DLL calling convention (Error 49)

   

Arguments passed to a dynamic-link library (DLL) or Macintosh code resource routine must exactly match those expected by the routine. Calling conventions deal with number, type, and order of arguments. This error has the following causes and solutions: Your program is calling a routine in a DLL (in Windows) or a code resource (on the Macintosh) that's being passed the wrong type of arguments.

Make sure all argument types agree with those specified in the declaration of the routine you are calling.

Your program is calling a routine in a DLL (in Windows) or a code resource (on the Macintosh) that's being passed the wrong number of arguments.

Make sure you are passing the same number of arguments indicated in the declaration of the routine you are calling.

Your program is calling a routine in a DLL, but isn't using the StdCall calling convention.

If the DLL routine expects arguments by value, then make sure ByVal is specified for those arguments in the declaration for the routine.

Your Declare statement for a Windows DLL includes CDecl.

The CDecl keyword applies only to the Macintosh.

For additional information, select the item in question and press F1 (in Windows) or HELP (on the Macintosh).

 我明明是用了__stdcall,为什么还会有错误呢?再说了,相同的代码在vb中也是可以被正常执行的.难道说Testpartner中的vb为非标准的vb?于是,我就想试一下其他的window api是否能够被正常调用。copy了个sleep的声明 Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Declare Function HelloWorld Lib "Test.dll" () 突然发现了一个与自己声明不一致的地方,那就是我用了Function来声明这个没有返回值得函数。在vb中,没有返回值得函数应该用sub. 于是改了一下,错误也就不在了。   看来,Testpartner的vb环境比标准vb IDE在语法上要求更严格!

原文转自:http://www.ltesting.net