Saturday, September 13, 2008

Building the sample applications using Visual Studio 2005

RZDCX Sample Applications include Visual Studio 2008 (Version 9) project files.
To build a sample application using Visual Studio 2005 or older versions, create an empty project and add the source files to it. In the project file set the 'use precompiled headers' option to false or add the "#include stdafx.h" instruction to the source file.
Most of the samples consist of exactly one source file so this should not be very complicated.

Wednesday, September 3, 2008

RZDCX Release

[Updated 24 March 2023, fix links]

RZDCX Release is now available for download. This release introduces major improvements and bug fixes.

Following are some highlights of the major improvements in this release.

DICOM Server Applications are usually required to handled multiple concurrent associations. Release includes Multi-Threaded sample applications both in C# and in C++.

At first glance the multi-threading model that we chose might look a bit strange because the application event loop is actually handled in the worker thread (See for example MultithreadedServerExample AssocHandler DoWork). This paradigm was chosen because of some limitations that COM and .NET interop enforce with MTA's.

Error Handling
Release of RZDCX provides detailed log descriptions using the COM Error Handling framework.
When adding the error handling framework, we tried to provide the most accurate error text that can be presented to the user. Since RZDCX exposes a very High Level Programming API, every API call encapsulates many DICOM primitives and therefore we had to choose the correct message to show.
The error text is aimed to provide good diagnostics information. This means for example that if a file failed to send then the error will be of the send failure even if there were also problems in the association release command.
In C++ Use the _com_error::Description() method to get the error message.
In C# use the System.Runtime.InteropServices.COMException Message property to the error message.

Backwords Competibility of release
In release the dictionary method LookupTagByName was part of the Requester class (DCXREQ). In release we've added a new Dictionary class (DCXDIC) that handles the task of tag names and numbers look-ups.

Migration to Visual Studio 2008
Release was built using Visual Studio 2008. The DLL however is statically linked (what makes it a bit big) so there should not be any dependency problems.

Bug Fixes
Ticket 20: RZDCX MovePatient negotiates wrong SOP Class
Negotiates Study Root Move but tries to move on Patient Root.

Ticket 22: DCXACC Creates temporary file even if user provided a name
The call to the user callback should be before creating the temporary file and not after. Otherwise if the user provides a name, two files are created: the temp one and the user one and the temp one is left empty.