Re: Not able to use this C++ library in D

2019-06-06 Thread Kagamin via Digitalmars-d-learn
You should declare methods too, see example 
https://dlang.org/spec/cpp_interface.html#using_cpp_classes_from_d


Not able to use this C++ library in D

2019-06-05 Thread rnd via Digitalmars-d-learn
I am trying to use C++ DCMTK library ( https://dcmtk.org/ ) 
functions in D.
A relevant reference page is 
https://support.dcmtk.org/docs/classDcmFileFormat.html#details



Following is C++ code modified from 
https://stackoverflow.com/questions/5052148/how-to-use-dcmtk-in-qt


#include "dcmtk/dcmdata/dctk.h"
#include 
using namespace std;

int main() {
   DcmFileFormat fileformat;
   OFCondition status = fileformat.loadFile("test.dcm");
   if (status.good())   {
cout << "File loaded" << endl;
   }else{
  cerr << "Error: cannot read DICOM file (" << status.text() 
<< ")" << endl;

   }
   return 0;
}


I have tried to do the same in D with following code:

import std.stdio;
extern (C++) void loadFile(FILE *infile);
extern (C++) class DcmFileFormat;
extern (C++) class OFCondition;

void main(){
   DcmFileFormat fileformat;
   OFCondition status = fileformat.loadFile("test.dcm");
   if (status.good())   {
writeln("File loaded");
   }else{
  writeln("Error: cannot read DICOM file (", status.text(), 
")");

   }
}

However, I am getting following errors:

$ dmd dcmtk_eg.d
dcmtk_eg.d(5): Error: class `dcmtk_eg.DcmFileFormat` is forward 
referenced when looking for loadFile
dcmtk_eg.d(5): Error: class `dcmtk_eg.DcmFileFormat` is forward 
referenced when looking for loadFile
dcmtk_eg.d(5): Error: class `dcmtk_eg.DcmFileFormat` is forward 
referenced when looking for opDot
dcmtk_eg.d(5): Error: class `dcmtk_eg.DcmFileFormat` is forward 
referenced when looking for opDispatch
dcmtk_eg.d(10): Error: function 
dcmtk_eg.loadFile(shared(_IO_FILE)* infile) is not callable using 
argument types (DcmFileFormat, string)
dcmtk_eg.d(10):cannot pass argument fileformat of type 
dcmtk_eg.DcmFileFormat to parameter shared(_IO_FILE)* infile
dcmtk_eg.d(6): Error: class `dcmtk_eg.OFCondition` is forward 
referenced when looking for good
dcmtk_eg.d(6): Error: class `dcmtk_eg.OFCondition` is forward 
referenced when looking for good
dcmtk_eg.d(6): Error: class `dcmtk_eg.OFCondition` is forward 
referenced when looking for opDot
dcmtk_eg.d(6): Error: class `dcmtk_eg.OFCondition` is forward 
referenced when looking for opDispatch
dcmtk_eg.d(6): Error: class `dcmtk_eg.OFCondition` is forward 
referenced when looking for good
dcmtk_eg.d(6): Error: class `dcmtk_eg.OFCondition` is forward 
referenced when looking for good
dcmtk_eg.d(6): Error: class `dcmtk_eg.OFCondition` is forward 
referenced when looking for good
dcmtk_eg.d(6): Error: class `dcmtk_eg.OFCondition` is forward 
referenced when looking for good
dcmtk_eg.d(6): Error: class `dcmtk_eg.OFCondition` is forward 
referenced when looking for good
dcmtk_eg.d(6): Error: class `dcmtk_eg.OFCondition` is forward 
referenced when looking for mod
dcmtk_eg.d(6): Error: class `dcmtk_eg.OFCondition` is forward 
referenced when looking for good
dcmtk_eg.d(6): Error: class `dcmtk_eg.OFCondition` is forward 
referenced when looking for good
dcmtk_eg.d(6): Error: class `dcmtk_eg.OFCondition` is forward 
referenced when looking for good
dcmtk_eg.d(6): Error: class `dcmtk_eg.OFCondition` is forward 
referenced when looking for good
dcmtk_eg.d(6): Error: class `dcmtk_eg.OFCondition` is forward 
referenced when looking for good



Where is the problem and how can it be solved? Thanks for your 
help.