Bild von Digicam downloaden .. fwrite

PaRoX

Grünschnabel
Hallo allerseits,

Ich schreibe zur Zeit ein VCL-Programm mit Turbo C++ zur Ansteuerung einer Olympus Digitalkamera. Ich möchte gerne ein geschossenes Bild auf den Rechner herunterladen. Meine Funktion sieht so aus:

Code:
LONG32 DownloadImage(ULONG32 lCam, ULONG32 ulObjHandle)
{
	
	UINT16 uiPicType;
	PBYTE	pBuff;
	LONG32	lRet = 0;

	pBuff = new BYTE[nPicSize];

	lRet = GetImage(lCam, ulObjHandle, pBuff, nPicSize, 0);  // DLL-Funktion

//      So würde es mit MFC-CFile laut DLL-Beispielprogramm gehen
/*     CFile f("pic.jpg", CFile::modeCreate | CFile::modeWrite);
        f.Write(pBuff, nPicSize);
        f.Close(); */

	FILE * pFile;
	pFile = fopen ( "pic.jpg" , "wb" );
	fwrite (pBuff , 1 , nPicSize , pFile );
	fclose (pFile);

	delete [] pBuff;

	return lRet;
}

Die Datei pic.jpg wird zwar erstellt, ist aber lediglich ein einziges Byte groß. Wo liegt mein Fehler?

Vielen Dank schon mal!
 
Was ist denn der Wert von lRet? (was bedeutet dieser Wert laut DLL Doku?)

Was ist der Rückgabewert von fwrite?

Gruß
 
Zuletzt bearbeitet:
Hi.

lRet ist ein LONG32 Rückgabewert über den Fehlercodes übergeben werden. Ist dieser Wert 0, liegt kein Fehler vor. GetImage gibt in meinem Fall 0 zurück - also kein Fehler. So weit so gut.

Mittlerweile habe ich es hinbekommen. Die Funktion sieht jetzt wie folgt aus:

Code:
LONG32 DownloadImage(ULONG32 lCam, ULONG32 ulObjHandle)
{
	ULONG32	nPicSize;
	PBYTE	pBuff;
	LONG32	lRet = 0;

	nPicSize = ImageSize(ulObjHandle); // Bildgröße abfragen
	pBuff = new BYTE[nPicSize]; // Pufferarray erstellen

	lRet = GetImage(lCam, ulObjHandle, pBuff, nPicSize, 0); // Bild abrufen

	// In Datei schreiben
	FILE * pFile;
	pFile = fopen ( "pic.jpg" , "wb" );
	fwrite (pBuff, 1 , nPicSize , pFile );
	fclose (pFile);

	delete [] pBuff; // Puffer freigeben

	return lRet;
 
Code:
    lRet = GetImage(lCam, ulObjHandle, pBuff, nPicSize, 0); // Bild abrufen

    // In Datei schreiben
    FILE * pFile;
    pFile = fopen ( "pic.jpg" , "wb" );
    fwrite (pBuff, 1 , nPicSize , pFile );
    fclose (pFile);

Nur mal so als Tipp am Rande - Deine Rückgabewerte machen nur wirklich Sinn, wenn Du sie auch abfragst :eek: bspw. so:
Code:
lRet = GetImage(lCam, ulObjHandle, pBuff, nPicSize, 0); // Bild abrufen
if( lRet == 0 )
{
   // In Datei schreiben
   FILE * pFile;
   pFile = fopen ( "pic.jpg" , "wb" );
   if( pFile != NULL )
   {
       fwrite (pBuff, 1 , nPicSize , pFile );
       fclose (pFile);
   } // if( pFile != NULL )
} // if( lRet == 0 )
Das kann sonst sicher zu bösen Effekten kommen, wenn du (a) das Bild gar nicht bekommst oder (b) versuchst, in eine nicht geöffnete Datei zu schreiben! :suspekt:

Gruß
Klaus
 
Zurück