Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Holla.

Also folgendes für mich alleine unlösbares Problem:

ich arbeite mit VC++ und habe eine Sybasedatenbank.

Ich möchte bzw. muss *heul* in einem RichEditView rtf -Dateien Importieren.

<- kein problem

nun is es aber so das ich diese rtf datei in meine Datenbank abspeichern möchte.

datentyp von der spalte ist long varchar

<- kein problem

so jetzt enthält die rtf datei ein bild bzw nur n bild das ich in die tabelle abspeichern will

datentyp der spalte blob

das reinschreiben funktioniert teilweise ich bekomme zwar keinen fehler aber die datenbank schneidet was ab und nimmt formatierungen raus. Es ist halt nicht mehr das gleiche.

Wenn ich jetzt diese Spalte wieder in meinen View laden will funktioniert das natürlich nicht.

Nun haben wir uns gedacht das das am CString liegen kann mit dem ich die CallBack - funktion

rumhantiere. (abschliessende 0 usw.)

ok also habe versucht das bild in eine temorär datei zu speichern und dann dieses in die datenbank zu schreiben. funktioniert auch nicht <- Das programm erhängt sich bei der Callbackfunktion.

usw.

Hiemal ein Teil des ersten Versuchs, der im übrigen mit nur formatierten Texten funktioniert.

static DWORD CALLBACK

MyStreamOutCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)

{

CString* pstrRTF = (CString*) dwCookie;

char* sz = new char[cb+1];

strncpy(sz,(const char*)pbBuff,cb);

*(sz+cb)=0;

*pstrRTF += sz;

*pcb = cb;

delete [] sz;

/*

CFile* pFile = (CFile*) dwCookie;

pFile->Write(pbBuff, cb);

*pcb = cb;

*/

return 0;

}

*******************************

CString strFileName;

CString Buffer;

EDITSTREAM es;

strFileName = "C:\\test.rtf";

CFile rtfFile(strFileName, CFile::modeCreate|CFile::modeWrite|CFile::modeRead);

// NeuerEintrag();

es.dwCookie = (DWORD) &rtfFile;

es.pfnCallback = MyStreamOutCallback;

((CMainFrame*)GetParentFrame())->m_p1->m_hauptanzeige->StreamOut(SF_RTF, es)

ich hoffe es kann mir jemand helfen. bin am verzweifeln

mfg

cleo

Hallo und willkommen auf dem Board :)

Erstmal schieb ich Dich dahin, wo Du OnTopic bist, denn mit Standard-C/C++ hat CRichEditCtrl und der Rest der MFC nicht mehr viel zu tun ;)

Aber zum Thema:

Hast Du mal geprüft, ob in den Daten, die in Deiner Callback-Funktion aufschlagen, Nullbytes auftauchen? Die dürften Dir die Behandlung mit Strings erschweren.

es sind keine Nullbytes drinne.

aber ich habe es vorhin auch mit nem unsinged char array versucht indem ich das bild in ne extra datei abgespeichert habe und dem ding die länge mitgegeben habe.

hab dann das bild in dieses array geschrieben und wollte es in die db speichern.

und aus die maus. wieder einmal durchgelaufen durch die callback und das wars bzw. der hat das cfile objekt geöffnet aber nicht wieder geschlossen keine ahnung warum.

dann haben ich noch weiter rumgedoktored und nix kam bei raus.

vielleicht weiss ja jemand wie es gehen könnte bin natürlich auch für andere lösungsansätze dankbar.

mfg [camper]cleo

Der Ansatz mit CFile ist ja schon mal nicht schlecht. Aber ist das, was Du oben angegeben hast, der aktuelle Code? Da interpretierst Du nämlich den CFile*, der als Cookie reinkommt, als CString*. Das wird nicht funktionieren.

Wo und wann schließt Du das CFile-Objekt?

Wirft Write vielleicht eine Exception?

naja deswegen sach ich ja auch das das der erste versuch war.

schreib morgen den aktuellen code rein. mach etzt feierabend

mfg [camper]cleo

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.