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.

