TBlobStream Linker Error



  • Hallo,

    also will aus ner DB nen jpg laden, aber irgendwie funzt das net so recht!
    Hier mein code:

    TBlobField* f = new TBlobField(NULL);
    	f = dynamic_cast<TBlobField*>(Main_Form->IBDataSet->FieldByName("BILD"));
    	TBlobStream* s = new TBlobStream(f, bmRead);
    	TJPEGImage* img = new TJPEGImage();
    	img->LoadFromStream(s);
    	Image_PLU->Picture->Assign(img);
    
    	delete f;
    	delete s;
    	delete img;
    

    der compiler sagt es ist okay aber der Linker meint dann:

    [Linker Error] Error: Unresolved external '__fastcall Dbtables::TBlobStream::~TBlobStream()' referenced from C:\...\Test.OBJ
    [Linker Error] Error: Unresolved external 'Dbtables::TBlobStream::' referenced from C:\...\Test.OBJ
    [Linker Error] Error: Unresolved external '__fastcall Dbtables::TBlobStream::TBlobStream(Db::TBlobField *, Db::TBlobStreamMode)' referenced from C:\...\Test.OBJ

    Habt Ihr ne Ahnung wo das prob ist???? 😞

    Muß ich noch irgendwas einbinden oder so???

    Danke!



  • TBlobStream ist für die BDE. Nimm TIBBlobStream, das sollte dann passen.

    [EDIT] Wenn Du schon einen dynamic_cast machst (was vollkommen in Ordnung ist), solltest Du das Erbebnis prüfen. f kann NULL sein.



  • Hallo,

    danke für die Antwort! Also wenn ich nun TIBBlobStream benutze

    TIBBlobStream* s = new TIBBlobStream(f, bmRead);
    

    meint der Compiler:

    [C++ Error] main.cpp(444): E2285 Could not find a match for 'TIBBlobStream::TIBBlobStream(TBlobField *,TBlobStreamMode)'

    lol... 😞

    Wo ist nun das Problem??? 😕

    In der Hilfe schaut es so aus das TIBBlobStream für Delphi ist und net für c++!?

    Danke



  • Hallo

    Nein TIBBlobStream ist nicht nur für Delphi. Davon sagt die Hilfe auch nichts.
    Sondern dort ist der Konstruktor so angegeben

    __fastcall TIBBlobStream(void);
    

    bis bald
    akari



  • Hallo,

    hm und was heißt das jetzt genau??? Was ist an meinen code falsch?

    Danke



  • Hallo

    🙄

    TIBBlobStream* s = new TIBBlobStream;
    

    Das bedeutet natürlich das du in diesen eigenen noch die echten Daten aus dem aktuellen Blobfeld reinbringen must, das übernimmt hier nicht der Konstruktor.
    Siehe TBlobField::SaveToStream.

    bis bald
    akari



  • So,

    in anbetracht dessen das heut net mein tag ist und ich das absolut net schnalle muß ich nochmal fragen...

    TIBBlobStream* s = new TIBBlobStream;
    

    gut und schön doch...

    s->SaveToStream();
    

    erwartet nen Stram!

    Ich wollte aber nen BlobField übergeben (lesen) um den TIBBlobStream auf nen Image zu übergeben... quasi so:

    TBlobField* f = new TBlobField(NULL);
        f = dynamic_cast<TBlobField*>(Main_Form->IBDataSet->FieldByName("BILD"));
        TIBBlobStream* s = new TIBBlobStream;
    
        s->//ka was fehlt????
    
        TJPEGImage* img = new TJPEGImage();
        img->LoadFromStream(s);
        Image_PLU->Picture->Assign(img);
    
        delete f;
        delete s;
        delete img;
    

    Irgendwie drehe ich mich in kreis und der Groschen fällt net so recht! 😡

    Danke



  • Hallo,

    kann mir denn keiner helfen und mir sagen wie ich das hinbekomme???? 😞

    Danke!



  • Schau Dir mal die Methode TIBBlobStream::Create() an.



  • Okay...

    Schau Dir mal die Methode TIBBlobStream::Create() an.

    nach den einfügen von:

    s->Create(f, bmRead);
    

    meinte der Compiler: [C++ Error] main.cpp(445): E2316 'Create' is not a member of 'TIBBlobStream'

    lol hat noch jemand ne Idee wie's funzen könnte???? 😞

    Danke



  • Ich hab jetzt 3 Minuten gebraucht, um in der Hilfe TIBDataSet::CreateBlobStream() zu finden...


Anmelden zum Antworten