ContributionsMost RecentMost LikesSolutionsRe: TC 8.5 demo crashes ammemb.dllActually Robert was right - its "Actual Multiple Monitors" application that is causing problems. I faced this issue few more times when QTP wasn't started.Re: TC 8.5 demo crashes ammemb.dllWell I think that I did that but - will it also work this way if I use TC Demo version ?Re: TC 8.5 demo crashes ammemb.dllThanks for info. As for first question - I used the link you mentioned. Also thanks for the tip - it's possible that this application is messing up.Re: Moving project from QTP to TC8Well I know what you are saying. I was using TC for about 3 years so I think that I know what I'm doing ;) I used QTP 11 for 3 months and didn't like it at all. That's why I would expect that any help file already exist ;) What's even more - I read that there is something like Mission to Mars (something about moving existing tests in QTP to TC). So I'm only asking for help. Current framework is complex and uses mainly VBScript classes that's why it's hard to fix everything. Also change from "desktop" to "process" as an home for application is difficult to maintain right now. But right now I'm doing fine but if such help would exist I would appreciate that. TC 8.5 demo crashes ammemb.dllHello, I'm evaluating TC8 demo. TC is frequently crashing at module ammemb.dll. Is there any know fix for this? I have already send info to support but none contacted me with this problem. Error report is attached.Moving project from QTP to TC8Hello, I'm evaluating TC8 demo right now. I want to move my automation project from QTP to TC. I'm automating Delphi application. Do you have any standard solutions for this case? For example I used "Description.Create" in QTP - I know that I could use findChild method instead but I would need to convert my descriptions to arrays. Same thing for GetRoProperty - sometimes I just need to delete it and use TC property but hwnd in QTP is named Handle in TC. Dates: in QTP - now is aqDateTime.now Thing is that we have wrapped QTP objects to our own classes and used them in tests. Much of this will work in TC but some parts need to be rewritten in new way (compatible with TC) Any help would be appreciated.Writing plugin for application written in MFCHello, We are currently investigating possibility to write plugin for our custom C++ control that is based on StingrayObjectiveGrid version 12.0.1 and derives from CGXGridWnd. From what I have read help TC 8.1 currently supports only Stringray grid version 9. We have compiled our application as open but unfortunately our control is not recognized. We also tried to map our object to StingrayObjectiveGrid object but TC didn't let us to do that saying that this control is not supported. So what we are asking is - how could we create support for our grid? Is it possible to write our plugin in C# (just how it was done ind samples) or it need to be written in C++? Is there any documentation for SDK samples? The C++ samples looks like plugins for TC not for custom controls. The C# examples are clear and we managed to run them. Currently we are using QTP version 11 that supports our control, so this information is critical for us before we will be thinking about buying TC8. In attached zip file there is a Sample application with Stringgray grid in DEBUG version. We had problems with it using object spy on it. Application crashes while TC is reading pdb files. DominikRe: How to write Classes/DataObjects generator using Script ExtensionsHello Alex, I think that you misunderstand me. I know that I can't use ODT objects by script extensions. What I would like to do is a code generator. So after clicking/writing in some kind of wizard - the code similar to the one posted above would by placed directly in script unit. This could work exactly like any other script extension. The only difference would be that there would be generated huge amount of code (text) with procedures etc. just to be able to generate classes and objects programatically. Basically instead generating simple if something then something I want to generate Procedure generate_classes; var .. begin .. .. .. end; function do_something; begin ... end; Procedure another_generated_procedure; var .. begin .. .. .. end; Dominik.Re: Broken links on site.Hello, Thanks for update. I found some other links that doesn't work but can't remember where they was. I would use some tool that would validate all links on site to eliminate all errors. How to write Classes/DataObjects generator using Script ExtensionsI didn't found any information that would help me do something like this. I would like to develop by myself or maybe use any existing extension that would be a wizard for creating an ODT.Classes I have code like above and what I would like to do is to create a wizard that would generate code like above right to Script Unit. The steps I'm thinking of are: Form for editing values like ClassName, application that this Class applies to (combobox) Next form would let me point an object in application which will be added to class. I would give this object name according to what this object do in application. I would like to take properties of this object and put into Class that I'm just creating. Messagebox that would ask "Do you want to add next property of class ?" Some empty methods for whole class like DefaultMethod or something TestedObjectParentPath - FullName of the object parent. TestedObjectPath - FullName of the tested object. Because I doesn't see any way to store object inside Class or Data Object I want to evaluate this strings to have an object on which I will be executing methods. So question is - is there any easy way to change something like this: Sys.Process('Application').VCLObject('MainForm') to correct string object which in delphiscript would look like this one 'Sys.Process(''''Application'''').VCLObject(''''MainForm'''') ' FindValue - if something would go wrong while evaluating object I can try to find it using parent.FindChildren() - currently I'm using ObjectIdentifier proprerty ObjClassName - ObjectType property Does any one have done something similar ? Any tips to creating such code by wizard ? function CreateClassObject; var Obj; begin // Declares new classes ODT.Data.Clear; ODT.Classes.Clear; ODT.Classes.Declare('BaseObject'); Obj := ODT.Classes.TcObject; // Adds two properties to the class Obj.AddProperty('TestedObjectParentPath', 0); Obj.AddProperty('FindProperty', 'ObjectIdentifier'); Obj.AddProperty('FindValue', ''); Obj.AddProperty('TestedObjectPath', 0); Obj.AddProperty('ObjClassName', 0); Obj.AddProperty('Value', ''); Obj.AddMethod('FindObject','Classes.FindObject'); Obj.AddMethod('GetObjClassName','Classes.GetObjClassName'); Obj.AddMethod('DefaultOperation','Classes.DefaultOperation'); end; function CreateClassLogin; var LoginObj, ClassInstance, PropNum; begin DeleteGroupByName('Login'); DeleteClassByName('Login'); // Declares new classes ODT.Classes.Declare('Login'); LoginObj := ODT.Classes.Login; LoginObj.AddPropOfClassType('_wndfrmLogin', 'BaseObject'); LoginObj.AddPropOfClassType('_edttLogin', 'BaseObject'); LoginObj.AddPropOfClassType('_edtPassword', 'BaseObject'); LoginObj.AddPropOfClassType('_btnLogin', 'BaseObject'); end; function CreateObjectLogin; var Group, VarClass; begin DeleteGroupByName('Login'); // Creates a new data group Group := ODT.Data.AddGroup('Login'); // Adds new variables to the created data group VarClass := Group.AddVarOfClassType('LoginTest', 'Login'); end; procedure FillOdtLoginProperties(); var LoginTestObj; begin LoginTestObj:= ODT.Data.Login.LoginTest; LoginTestObj._wndfrmLogin.TestedObjectParentPath:=ODT.Data.Enviroment.Enviroment._CurrentTestedApplication; LoginTestObj._wndfrmLogin.FindValue:='wndfrmLogin'; LoginTestObj._edttLogin.TestedObjectParentPath:= LoginTestObj._wndfrmLogin.TestedObjectParentPath; LoginTestObj._edttLogin.FindValue:='edtUserName'; //LoginTestObj._edtLogin. TestedObjectPath := ''; LoginTestObj._edtLogin.Methods['DefaultOperationMethod'].Enabled := true; LoginTestObj._edtPassword.TestedObjectParentPath :=LoginTestObj._wndfrmLogin.TestedObjectParentPath;; LoginTestObj._edtPassword.FindValue:='edtPassword'; //LoginTestObj.edtPassword.TestedObjectPath :=''; LoginTestObj.edtPassword.Methods['DefaultOperationMethod'].Enabled := true; LoginTestObj._btnLogin.TestedObjectParentPath :=LoginTestObj._wndfrmLogin.TestedObjectParentPath;; LoginTestObj._btnLogin.FindValue:='btnLogin'; //LoginTestObj.btnLogin.TestedObjectPath:=''; LoginTestObj._btnLogin.Methods['DefaultOperationMethod'].Enabled := true; end; procedure FillOdtLoginValues(); var LoginTestObj; begin LoginTestObj:= ODT.Data.Login.LoginTest; LoginTestObj._edtLogin.Value:='login'; LoginTestObj._edtPassword.Value:='password'; end; procedure OdtLoginTestRun(); begin ODT.Data.Login.Run; end;