Es funktioniert jetzt soweit alles.
Ich bin nicht so bewandert was C angeht. Ich habs jetzt zum Laufen gebracht. DIe c funktion hat nicht meine Daten bemeckert (hat nichts bemeckert) sondern eher den Falschen Parameter den ich mit übergben habe.
Code: Alles auswählen
/**
\brief Adds FMD to enrollment operation.
Add an FMD to the pool of FMDs for enrollment and return a flag indicating when the enrollment is ready.
This function must be called before dpfj_create_enrollment_fmd.
\param fmd_type type of the FMD.
\param fmd pointer to the FMD data.
\param fmd_size size of the FMD data.
\param fmd_view_idx index of the view
\return DPFJ_SUCCESS: FMD added, enrollment is ready.
\return DPFJ_E_MORE_DATA: FMD added, more FMDs for enrollment required.
\return DPFJ_E_INVALID_PARAMETER: One or more parameters passed are invalid.
\return DPFJ_E_ENROLLMENT_NOT_STARTED: Enrollment is not started.
\return DPFJ_E_FAILURE: Unknown error.
*/
int dpfj_add_to_enrollment(
DPFJ_FMD_FORMAT fmd_type,
unsigned char* fmd,
unsigned int fmd_size,
unsigned int fmd_view_idx
);
Ich hatte immer nur den "DPFJ_E_FAILURE" bekommen, was das Problem natürlich nicht wirklich aufgezeigt hat.
Body
Code: Alles auswählen
#include "fprint.h"
#include "fprintmanager.h"
#include <dpfpdd.h>
#include <stdexcept>
#include <QDebug>
#include <qpixmap.h>
#include <qpainter.h>
FPrint::FPrint(unsigned char* data, unsigned int length, QObject* parent): QObject(parent)
{
this->fprintData = QByteArray((const char*)data,length);
this->fprintDataLength = length;
this->error = FPrint::NoError;
this->fmd = NULL;
}
FPrint::~FPrint()
{
}
unsigned char* FPrint::getFprintData()
{
return (unsigned char*)this->fprintData.data();
}
unsigned int FPrint::getFprintDataLength()
{
return this->fprintDataLength;
}
FPrint::Error FPrint::getError()
{
return this->error;
}
FPrintFmd* FPrint::getFmd()
{
if(!this->fmd)
{
FPrintFmd *tmpFmd = new FPrintFmd(this);
tmpFmd->createFmdFromFid(this->getFprintData(),this->fprintDataLength);
this->fmd = tmpFmd;
}
return this->fmd;
}
Header
Code: Alles auswählen
#include "fprint.h"
#include "fprintmanager.h"
#include <dpfpdd.h>
#include <stdexcept>
#include <QDebug>
#include <qpixmap.h>
#include <qpainter.h>
FPrint::FPrint(unsigned char* data, unsigned int length, QObject* parent): QObject(parent)
{
this->fprintData = QByteArray((const char*)data,length);
this->fprintDataLength = length;
this->error = FPrint::NoError;
this->fmd = NULL;
}
FPrint::~FPrint()
{
}
unsigned char* FPrint::getFprintData()
{
return (unsigned char*)this->fprintData.data();
}
unsigned int FPrint::getFprintDataLength()
{
return this->fprintDataLength;
}
FPrint::Error FPrint::getError()
{
return this->error;
}
FPrintFmd* FPrint::getFmd()
{
if(!this->fmd)
{
FPrintFmd *tmpFmd = new FPrintFmd(this);
tmpFmd->createFmdFromFid(this->getFprintData(),this->fprintDataLength);
this->fmd = tmpFmd;
}
return this->fmd;
}
Ich hatte vorher QByteArray::fromRawData( const char * data, int size ) [static] benutzt. Das war natürlich nicht gut, weil das auch nur auf das Original gezeigt hat.
Intern benötige ich Streambare member(QDataStream unterstützt den Typ auch nicht) und greife auch deswegen auf QByteArray zurück. Nur brauche ich für diverse Funktionen das unsigned char* und muss deswegen casten.