[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: ginkgocadx ...



Hello Michael, 

> As one of the DCMTK developers I maybe can help (or contact the
> adequate person of the DCMTK team), so let me know what kind of 
> problems you encountered.

Nice, here they are: 

(1) 
UID_FINDGeneralPurposeWorklistInformationModel is gone (no changelog
entry though) 

My workaround: I defined it to its old value "1.2.840.10008.5.1.4.32.1"
in the source file where it was used.  

(2)
The original code had 

LOG4CPLUS_BEGIN_SYNCHRONIZE_ON_MUTEX( getLogLog().mutex )
...
LOG4CPLUS_END_SYNCHRONIZE_ON_MUTEX;

After adding the DCMTK_ prefix it turned out that  the mutex is now private: 

ERROR: <<<< 
In file included from /home/gerddie/src/External/ginkgocadx-3.7.1.1573.41/src/cadxcore/main/controllers/log4cplus/guiappender.cpp:15:0:
/usr/include/dcmtk/oflog/helpers/loglog.h: In member function ‘virtual void gnkLog4cplus::GUIAppender::append(const dcmtk::log4cplus::spi::InternalLoggingEvent&)’:
/usr/include/dcmtk/oflog/helpers/loglog.h:132:27: error: ‘dcmtk::log4cplus::thread::Mutex dcmtk::log4cplus::helpers::LogLog::mutex’ is private
             thread::Mutex mutex;
                           ^
/home/gerddie/src/External/ginkgocadx-3.7.1.1573.41/src/cadxcore/main/controllers/log4cplus/guiappender.cpp:116:58: error: within this context
  DCMTK_LOG4CPLUS_BEGIN_SYNCHRONIZE_ON_MUTEX( getLogLog().mutex )
>>>>

I removed the locking calls in the hope that somehow whatever needs to be locked there is now locked inside the logger class, I now get some async-X-errors when exiting the application. 
It seems though, that is this case the original developers mis-used this mutex to also handle the access to their GUI-based log, so I guess this is something that I would have to correct independently of DCMTK. 


(3) (This is the big one)
For some reason dcmtk-3.6.1-20150924 has an hiccup in
dcmth/oflog/  logger.h and logmacro.h that is related to UNICODE: 

ERROR<<<<
In file included from /usr/include/dcmtk/oflog/logmacro.h:37:0,
                 from /usr/include/dcmtk/oflog/oflog.h:29,
                 from /usr/include/dcmtk/dcmdata/dctypes.h:27,
                 from /usr/include/dcmtk/dcmdata/dctk.h:28,
                 from /home/gerddie/src/External/ginkgocadx
-3.7.1.1573.41/src/cadxcore/main/controllers/dcmtk/libi2d/d2dcommon.h:5
,
                 from /home/gerddie/src/External/ginkgocadx
-3.7.1.1573.41/src/cadxcore/main/controllers/dcmtk/libi2d/document2dcm.
h:28,
                 from /home/gerddie/src/External/ginkgocadx
-3.7.1.1573.41/src/cadxcore/main/controllers/dcmtk/dicomimg2dcm.cpp:38:

/usr/include/dcmtk/oflog/tracelog.h: In constructor
‘dcmtk::log4cplus::TraceLogger::TraceLogger(const
dcmtk::log4cplus::Logger&, const tstring&, const char*, int)’:
/usr/include/dcmtk/oflog/tracelog.h:59:79: error: invalid conversion
from ‘const wchar_t*’ to ‘char’ [-fpermissive]
           logger.forcedLog(TRACE_LOG_LEVEL,
DCMTK_LOG4CPLUS_TEXT("ENTER: ") + msg, file, line); 
>>>>>

Later on I get: 
ERROR: <<<<
In file included from /usr/include/dcmtk/oflog/oflog.h:28:0,
                 from /usr/include/dcmtk/dcmdata/dctypes.h:27,
                 from /usr/include/dcmtk/dcmdata/dctk.h:28,
                 from /home/gerddie/src/External/ginkgocadx
-3.7.1.1573.41/src/cadxcore/main/controllers/dcmtk/libi2d/d2dcommon.h:5
,
                 from /home/gerddie/src/External/ginkgocadx
-3.7.1.1573.41/src/cadxcore/main/controllers/dcmtk/libi2d/document2dcm.
h:28,
                 from /home/gerddie/src/External/ginkgocadx
-3.7.1.1573.41/src/cadxcore/main/controllers/dcmtk/dicomimg2dcm.cpp:38:
/usr/include/dcmtk/oflog/logger.h:112:23: note: candidate: static
dcmtk::log4cplus::Logger dcmtk::log4cplus::Logger::getInstance(const
tstring&)
         static Logger getInstance(const log4cplus::tstring& name);
                       ^
/usr/include/dcmtk/oflog/logger.h:112:23: note:   no known conversion
for argument 1 from ‘const tchar* {aka const wchar_t*}’ to ‘const
tstring& {aka const OFString&}’
/usr/include/dcmtk/oflog/logger.h:126:23: note: candidate: static
dcmtk::log4cplus::Logger dcmtk::log4cplus::Logger::getInstance(const
tstring&, dcmtk::log4cplus::spi::LoggerFactory&)
         static Logger getInstance(const log4cplus::tstring& name,
spi::LoggerFactory& factory);
>>>> 

I tried to define UNICODE at the compile command line, I tried moving
the includes up so that wxWidgets doesn't provide defines that may mix
up the code, but to no avail: 

Finally, since these loggers are not used, I defined the include guards
before including anything from dcmtk to avoid that these files are read
at all, i.e. I defined:

#define DCMTK_LOG4CPLUS_TRACELOGGER_H
#define DCMTK_LOG4CPLUS_LOGGING_MACROS_HEADER_

Then I prayed for forgiveness and all compiled and linked. 

I'd be grateful for any help, be advised though, that the developers of
ginkgocadx did a lot of dirty coding, e.g. copying files from original
libraries and then slightly adjusting them. For example they provided a
copy of offile.h  with their own changed implementation of OFFile
without changing the class name or the header guard define. 

That means it is quite possibe that this last error is a result of such a mixup and the only way to find this is digging through the preprocessed source. 
... but first I have to fix the VTK transition bugs.

Best, 
Gert 





Reply to: