Now I want to get some information such as patient's name and patient'id,so I made a fuction to get those information.
Code: Select all
#include "stdafx.h"
#include "DCMDLL.h"
// #include "winsock2.h"
#include "osconfig.h" /* make sure OS specific configuration is included first */
#include "winsock.h"
#include "dctk.h"
#include "dcdeftag.h"
#define INCLUDE_CSTDLIB
#define INCLUDE_CSTDIO
#define INCLUDE_CSTRING
#define INCLUDE_CERRNO
#define INCLUDE_CSTDARG
#define INCLUDE_CCTYPE
#include "ofstdinc.h"
BEGIN_EXTERN_C
#ifdef HAVE_SYS_FILE_H
#include <sys/file.h>
#endif
END_EXTERN_C
#ifdef HAVE_GUSI_H
#include <GUSI.h>
#endif
#include "ofstring.h"
#include "dimse.h"
#include "diutil.h"
#include "dcdatset.h"
#include "dcmetinf.h"
#include "dcfilefo.h"
#include "dcdebug.h"
#include "dcuid.h"
#include "dcdict.h"
#include "dcdeftag.h"
#include "cmdlnarg.h"
#include "ofconapp.h"
#include "dcuid.h" /* for dcmtk version name */
#include "dicom.h" /* for DICOM_APPLICATION_REQUESTOR */
#include "dcostrmz.h" /* for dcmZlibCompressionLevel */
#include "dcasccfg.h" /* for class DcmAssociationConfiguration */
#include "dcasccff.h" /* for class DcmAssociationConfigurationFile */
#ifdef ON_THE_FLY_COMPRESSION
#include "djdecode.h" /* for dcmjpeg decoders */
#include "djencode.h" /* for dcmjpeg encoders */
#include "dcrledrg.h" /* for DcmRLEDecoderRegistration */
#include "dcrleerg.h" /* for DcmRLEEncoderRegistration */
#endif
#ifdef WITH_OPENSSL
#include "tlstrans.h"
#include "tlslayer.h"
#endif
#ifdef WITH_ZLIB
#include <zlib.h> /* for zlibVersion() */
#endif
#define OFFIS_CONSOLE_APPLICATION "storescu"
static char rcsid[] = "$dcmtk: " OFFIS_CONSOLE_APPLICATION " v"
OFFIS_DCMTK_VERSION " " OFFIS_DCMTK_RELEASEDATE " $";
/* default application titles */
#define APPLICATIONTITLE "STORESCU"
#define PEERAPPLICATIONTITLE "ANY-SCP"
static OFBool opt_verbose = OFFalse;
static OFBool opt_showPresentationContexts = OFFalse;
static OFBool opt_debug = OFFalse;
static OFBool opt_abortAssociation = OFFalse;
static OFCmdUnsignedInt opt_maxReceivePDULength = ASC_DEFAULTMAXPDU;
static OFCmdUnsignedInt opt_maxSendPDULength = 0;
static E_TransferSyntax opt_networkTransferSyntax = EXS_Unknown;
static OFBool opt_haltOnUnsuccessfulStore = OFTrue;
static OFBool unsuccessfulStoreEncountered = OFFalse;
static int lastStatusCode = STATUS_Success;
static OFBool opt_proposeOnlyRequiredPresentationContexts = OFFalse;
static OFBool opt_combineProposedTransferSyntaxes = OFFalse;
static OFCmdUnsignedInt opt_repeatCount = 1;
static OFCmdUnsignedInt opt_inventPatientCount = 25;
static OFCmdUnsignedInt opt_inventStudyCount = 50;
static OFCmdUnsignedInt opt_inventSeriesCount = 100;
static OFBool opt_inventSOPInstanceInformation = OFFalse;
static OFBool opt_correctUIDPadding = OFFalse;
static OFString patientNamePrefix("OFFIS^TEST_PN_"); // PatientName is PN (maximum 16 chars)
static OFString patientIDPrefix("PID_"); // PatientID is LO (maximum 64 chars)
static OFString studyIDPrefix("SID_"); // StudyID is SH (maximum 16 chars)
static OFString accessionNumberPrefix; // AccessionNumber is SH (maximum 16 chars)
static OFBool opt_secureConnection = OFFalse; /* default: no secure connection */
static const char *opt_configFile = NULL;
static const char *opt_profileName = NULL;
#ifdef WITH_ZLIB
static OFCmdUnsignedInt opt_compressionLevel = 0;
#endif
#ifdef WITH_OPENSSL
static int opt_keyFileFormat = SSL_FILETYPE_PEM;
static OFBool opt_doAuthenticate = OFFalse;
static const char *opt_privateKeyFile = NULL;
static const char *opt_certificateFile = NULL;
static const char *opt_passwd = NULL;
static OFString opt_ciphersuites(SSL3_TXT_RSA_DES_192_CBC3_SHA);
static const char *opt_readSeedFile = NULL;
static const char *opt_writeSeedFile = NULL;
static DcmCertificateVerification opt_certVerification = DCV_requireCertificate;
static const char *opt_dhparam = NULL;
#endif
static void
errmsg(const char *msg,...)
{
va_list args;
fprintf(stderr, "%s: ", OFFIS_CONSOLE_APPLICATION);
va_start(args, msg);
vfprintf(stderr, msg, args);
va_end(args);
fprintf(stderr, "\n");
}
static OFCondition
addStoragePresentationContexts(T_ASC_Parameters *params, OFList<OFString>& sopClasses);
static OFCondition
cstore(T_ASC_Association *assoc, const OFString& fname);
#define SHORTCOL 4
#define LONGCOL 19
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
// This is an example of an exported variable
DCMDLL_API int nDCMDLL=0;
// This is an example of an exported function.
DCMDLL_API int fnDCMDLL(void)
{
return 42;
}
//--------
DCMDLL_API int
storescu(int argc, char *argv[])
{
// the fuction's boy is the storescu fuction's.
//........................
//..................
}
int getpatientName()
{
DcmFileFormat fileformat;
OFCondition status = fileformat.loadFile("test.dcm");
if (status.good())
{
DcmDataset *dset = fileformat.getDataset();
OFString patientsName;
OFCondition status2 =dset.findAndGetOFString(DCM_PatientsName, patientsName);
if (status2.good())
{
cout << "Patient's Name: " << patientsName << endl;
} else
cerr << "Error: cannot access Patient's Name!" << endl;
} else
cerr << "Error: cannot read DICOM file (" << status.text() << ")" << endl;
return 1;
}
error C2228: left of '.findAndGetOFString' must have class/struct/union type.
I have check the head file ,and include such as "dctk.h" and "dcdeftag.h",I need someone's helpe,helpe me to solve the stupid problem,thanks.