DCMTK开发笔记(一):我的第一个DCMTK demo

实验平台

  • Visual Studio 2010
  • 已编译的 DCMTK 3.6.2 Debug x64版本
    关于DCMTK的编译方法,参见 DCMTK 3.6.2(MD支持库)与Microsoft Visual Studio 2017开发环境的搭建

实验步骤

  1. 在VS2010中新建Visual C++ Win32 控制台应用程序 空项目,命名为DcmtkDemo
  2. 在源文件中添加新建项 .cpp 文件,命名为main.cpp
  3. 粘贴如下测试代码,代码来源为 DICOM医学图像处理:基于DCMTK工具包学习和分析worklist
#include 
#include 
#include "dcmtk/config/osconfig.h"
#include "dcmtk/dcmdata/dctk.h"
#include "dcmtk/dcmdata/dcpxitem.h"
#include "dcmtk/dcmjpeg/djdecode.h"
#include "dcmtk/dcmjpeg/djencode.h"
#include "dcmtk/dcmjpeg/djcodece.h"
#include "dcmtk/dcmjpeg/djrplol.h"
using namespace std;
 
int main()
{
	char uid[100];
	DcmFileFormat fileformat;
	DcmDataset *dataset = fileformat.getDataset();
	/**********************************************
	*
	*利用下列语句可以生成worklist的数据库文件,即
	*不含有影像信息的dcm文件
	*
	************************************************/
	dataset->putAndInsertString(DCM_SOPClassUID, UID_SecondaryCaptureImageStorage);
	dataset->putAndInsertString(DCM_SOPInstanceUID, dcmGenerateUniqueIdentifier(uid, SITE_INSTANCE_UID_ROOT));
	dataset->putAndInsertString(DCM_PatientName, "Doe^John");
	OFCondition status = fileformat.saveFile("D:\\DcmWorklist\\worklist\\test.wl", EXS_LittleEndianExplicit);
	if (status.bad())
		cerr << "Error: cannot write DICOM file (" << status.text() << ")" << endl;
 
	return 0;
}

3.将已编译好的DCMTK库拷贝至项目目录下(与DcmtkDemo.sln放在一个目录下),本机中位置为E:\Projects\DcmtkDemo\DCMTK
4. 设置项目属性

  • 点击项目>>属性>>配置属性>>常规>>字符集 将“使用Unicode字符集”改为 “使用多字节字符集”
    DCMTK开发笔记(一):我的第一个DCMTK demo_第1张图片
  • 属性->调试->环境 增加 path=$(SolutionDir)\DCMTK\bin; 重新启动VS
    DCMTK开发笔记(一):我的第一个DCMTK demo_第2张图片
  • 属性>>VC++目录>>包含目录 添加 $(SolutionDir)\DCMTK\include
    DCMTK开发笔记(一):我的第一个DCMTK demo_第3张图片
  • 属性>>C/C++>>代码生成>>运行库 改为 多线程调试 DLL (/MDd)
  • 属性>>链接器>>常规>>附加库目录 添加
    $(SolutionDir)\DCMTK\lib
  • 属性>>链接器>>输入>>附加依赖项 添加
Iphlpapi.lib
ws2_32.lib
wsock32.lib
netapi32.lib
ofstd.lib
oflog.lib
dcmdata.lib
dcmdsig.lib
dcmnet.lib
dcmsr.lib
dcmimgle.lib
dcmqrdb.lib
dcmtls.lib
dcmwlm.lib
dcmpstat.lib
dcmjpls.lib
dcmjpeg.lib
dcmimage.lib
charls.lib
ijg8.lib
ijg12.lib
ijg16.lib
i2d.lib
  1. 由于使用的dcmtk库是x64版本,生成时需要在配置管理器中将平台改为x64
  2. 编译运行

可能遇到的问题及解答

  1. 错误信息:
dcmtk\oflog\tracelog.h(59): error C2678: 二进制“+: 没有找到接受“const wchar_t [8]”类型的左操作数的运算符(或没有可接受的转换)
......
error C2665: “dcmtk::log4cplus::Logger::getInstance”: 2 个重载中没有一个可以转换所有参数类型
  • 原因:dcmtk不支持Unicode字符集,需要将字符集设置为多字节字符集
  • 解决方法:点击项目>>属性>>配置属性>>常规>>字符集 将“使用Unicode字符集”改为 “使用多字节字符集”
  1. 错误信息:
main.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: virtual __thiscall DcmFileFormat::~DcmFileFormat(void)" (__imp_??1DcmFileFormat@@UAE@XZ),该符号在函数 _main 中被引用
.......
fatal error LNK1120: 15 个无法解析的外部命令
  • 原因:
    ①错误使用Win32平台进行Debug,导致无法识别用x64编译的dcmtk库
    ②未将 $(SolutionDir)\DCMTK\lib 添加 到链接器附加库目录
    ③未将相应 .lib 文件加入附加依赖项
  • 解决方法:
    ①生成时在配置管理器中将平台改为 x64
    ②属性>>链接器>>常规>>附加库目录 添加
    $(SolutionDir)\DCMTK\lib
    ③属性>>链接器>>输入>>附加依赖项 添加
Iphlpapi.lib
ws2_32.lib
wsock32.lib
netapi32.lib
ofstd.lib
oflog.lib
dcmdata.lib
dcmdsig.lib
dcmnet.lib
dcmsr.lib
dcmimgle.lib
dcmqrdb.lib
dcmtls.lib
dcmwlm.lib
dcmpstat.lib
dcmjpls.lib
dcmjpeg.lib
dcmimage.lib
charls.lib
ijg8.lib
ijg12.lib
ijg16.lib
i2d.lib
  1. 错误信息:程序生成成功,运行时出现错误
    DCMTK开发笔记(一):我的第一个DCMTK demo_第4张图片
    DCMTK开发笔记(一):我的第一个DCMTK demo_第5张图片
  • 原因:程序运行时找不到.dll库
  • 解决方法:属性->调试->环境 增加 path=$(SolutionDir)\DCMTK\bin; 重新启动VS2010
  1. error LNK2001: unresolved external XXX
    参见 Compilation of DCMTK-based program fails with LNK2001 [MSVC]

你可能感兴趣的:(DCMTK,DCMTK)