Today I will show you how to make a very simple application with C#.
VBS example
Let's see very simple VBS example:Set DOORSObj = CreateObject("DOORS.Application") DOORSObj.runStr ("ack ""hello""")
It's so simple to call a DXL script from VBS!
C# Example
Well C# is little bit more complex than VBS. But once all steps are done it is very easy to use it.CLR Assembly
First you need to create a .NET common language runtime (CLR) assembly. I used TlbImp.exe. This converts type definitions found in COM type library into equivalent definitions in CLR assembly.You can find DOORS type library in DOORS bin folder:
C:\>"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\x64\TlbImp.exe" "c:\Program Files\IBM\Rational\DOORS\9.6\bin\doors.tlb"
Above created a DOORSCOMLib.dll in c:\.
Once you have this dll you can simply add it to your C# project.
- Select References
- Add Referece...
- Browse to the location where is your DOORSCOMLib.dll.
- Once imported right-click on DOORSCOMLib and see its properties
- Set "Embed Interop Types" to false.
Embed Interop Types set to false
Now you can use this library in your code.
DOORSCOMLib interface
DOORSCOMLib has a following interfaces:
IDoorsDXL lets you run DXL:
- void runDXL(string)
- void runFile(string)
- string restult()
IDoorsStatus enables checking DOORS session status:
- string clientVersion
- string clientStatus (1 user logged in, 0 DOORS started but user not logged)
Usage
Usage of DOORSCOMLib is very simple; simply declare a required interface and use it.
IDoorsStatus doorsStatus = Activator.CreateInstance(typeof(DOORSClass)) as IDoorsStatus;
IDoorsDXL doorsDXL = Activator.CreateInstance(typeof(DOORSClass)) as IDoorsDXL;
Here is a simple "Hello Word" application illustrating how to use those interfaces:
Here is a simple "Hello Word" application illustrating how to use those interfaces:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using DOORSCOMLib; namespace HelloCOM { class Program { static void Main(string[] args) { IDoorsStatus doorsStatus = null; doorsStatus = Activator.CreateInstance(typeof(DOORSClass)) as IDoorsStatus; if (doorsStatus == null) { Console.WriteLine("Null instance"); return; } // the session is up, but user might not be logged in int trycount = 0; while (doorsStatus.clientState != 1 && trycount < 30) { Console.WriteLine("DOORS not logged in yet"); System.Threading.Thread.Sleep(2000); ++trycount; } // we have a session Console.WriteLine("DOORS version " + doorsStatus.clientVersion); IDoorsDXL doors = Activator.CreateInstance(typeof(DOORSCOMLib.DOORSClass)) as IDoorsDXL; if (doors != null) { doors.runStr("ack \"hello from C# !\""); } } } }
This should start a DOORS session (if not already started) and display a "hello from C# !" message.