Biblioteka z której chce skorzystać to https://github.com/DCMTK/dcmtk
lata temu popełniłem program który operował na danych dicom ,
projekt wraca tylko ze już nowsza wersja Delphi, cześć komponentów było kupionych ale bez źródeł , wiec trochę zabawy bedzie.
Widac subtelne różnice pomiędzy C++ a Pascalem
np. taka metoda DcmFileFormat.saveFile
https://support.dcmtk.org/docs/classDcmFileFormat.html#aabd61807a1325243b298ff80bd03a07f
Funkcja **saveFile ** zwraca stan operacji jako obiekt i to trochę jest dla mnie istotne aby odczytac stan operacji
po stronie Delphi
Ja to zaimplemetowalem tak
#if defined(_WIN32)
#define C_EXPORT extern "C" __declspec( dllexport )
#else
#define C_EXPORT extern "C"
#endif
typedef DcmFileFormat *PDcmFileFormat;
typedef OFCondition *POFCondition;
typedef DcmDataset *PDcmDataset;
typedef DcmTag *PDcmTag;
typedef char* PWideString;
// w zaleznoci od parametrow kompilacji cmake mam rozne typy danych
#if (defined(WIDE_CHAR_FILE_IO_FUNCTIONS) || defined(WIDE_CHAR_MAIN_FUNCTION)) && defined(_WIN32)
typedef wchar_t* OFFilenamePas; // OFFilename po stronie pascala
#else
typedef char* OFFilenamePas; // OFFilename po stronie pascala
#endif
C_EXPORT POFCondition DcmFileFormat_SaveFile(PDcmFileFormat p_DcmFileFormat, OFFilenamePas fname, const E_TransferSyntax writeXfer = EXS_Unknown )
{
OFCondition wynik = p_DcmFileFormat->saveFile(fname, writeXfer);
POFCondition co = new OFCondition(wynik);
return co;
}
wersja po stronie pascal
function DcmFileFormat_SaveFile(p: PDcmFileFormat; c: pchar; writeXfer: E_TransferSyntax=EXS_Unknown): POFCondition;stdcall; external PAS_DCMTK_DLL;
Wywołanie funkcji zwraca wskaźnik do obiektu w którym jest stan operacji :) Abym mógł sprawdzić stan operacji
Tylko ze jak go nie zwolnię to jest wyciek pamięci :)
W kodzie DCMTK widzę nagminne używanie klas jako rekordów
Wszystkie funkcje ktore zwracaja wskaźnik na obiekt "POFCondition" moge przerobic na procedury z dodatkowym parametrem gdzie bedzie zwracany POFCondition
**Dzialac dziala , ale troche upierdliwe użycie c++ w Delphi **