Új hozzászólás Aktív témák

  • #99472384

    törölt tag

    Sziasztok, Üdv. Mindenkinek!

    Segítséget szeretnék kérni Visual C++ fordításban. Van egy kis forráskódom, amit sajnos nem tudok futtatható programmá fordítani.
    Eddig Pascal és Delphi programozással kísérleteztem, ezekkel nincs is gondom, de sajnos az említett forráskód Visual C++-ban íródott, és ilyen fejlesztőrendszerem nincs, ami meg ingyenes volt, azzal sehogyan sem jutottam előrébb, mert valami nem igazán működött a fordításnál. Egy jópár hibaüzenettel leállt a fordítás. (pl. stdafx.h hiányzik a fordítónak) Ráadásul a C++-ban nem is igazán vagyok járatos.

    Szóval abban kérném a hozzáértők segítségét, hogy legyenek szívesek megnézni a kódot, hogy egyáltalán jó-e, és ha igen, akkor legyen szíves valaki ezt nekem le is fordítani egy futtatható programmá. Természetesen Windows-ra kell, és ugye ez konzol progi. Sajnos a program íróját már nem lehet elérni, de állítólag működik, csak én sehogy sem boldogulok... :(
    Az is jó lenne, ha valaki bővebben kommentezné a kódot, mert akkor megpróbálom Delphi-ben megírni, hátha sikerül.

    Íme a forráskód:

    #include "stdafx.h"

    #include <fcntl.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <io.h>
    #include <stdio.h>

    #include "test.h"
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif


    // The one and only application object

    CWinApp theApp;

    using namespace std;

    unsigned long CalcChecksum( unsigned char* buffer, unsigned long len, unsigned long seed );


    int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
    {
    int nRetCode = 0;
    int fh;
    unsigned char buffer[0x8000];
    unsigned short len = 0x7FFC;
    unsigned short count;
    unsigned short seed = 1;
    unsigned long chkSum;

    // initialize MFC and print and error on failure
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    {
    // TODO: change error code to suit your needs
    _tprintf(_T("Fatal Error: MFC initialization failed\n"));
    nRetCode = 1;
    }
    else
    {
    // TODO: code your application's behavior here.
    if( argc != 2 )
    {
    cout << "usage: CalcChecksum.exe drive:\\path\\info.dvr" << endl;
    return 0;
    }

    fh = _open(argv[1], _O_RDONLY | _O_BINARY);
    if( fh == -1 )
    {
    cout << "Error opening file " << argv[1] << endl;
    }
    count = _read( fh, buffer, 0x8000 );
    if( count != 0x8000 )
    {
    cout << "Error reading file " << argv[1] << endl;
    return 0;
    }
    _close(fh);
    chkSum = CalcChecksum( &buffer[0], len, seed );
    _ultoa( chkSum, (char*)&buffer[0], 16 );
    cout << "Checksum: 0x" << buffer << endl;
    }

    return nRetCode;
    }


    unsigned long CalcChecksum( unsigned char* buffer, unsigned long len, unsigned long seed )
    {
    unsigned char nrOfSegments;
    unsigned long regECX = seed;
    unsigned long regEDX = 0;
    unsigned long regEDI = 0;
    unsigned long retVal;


    nrOfSegments = len / 0x15b0;

    for( unsigned short i = 0; i < nrOfSegments; i++ )
    {
    for( unsigned short j = 0; j < 0x15b0; j++ )
    {
    regEDX = buffer[i*0x15b0+j];
    regECX += regEDX;
    regEDI += regECX;
    }
    regECX = regECX % 0xFFF1;
    regEDI = regEDI % 0xFFF1;
    }

    for( i = (nrOfSegments*0x15b0); i < len; i++ )
    {
    regEDX = buffer[i];
    regECX += regEDX;
    regEDI += regECX;
    }
    regECX = regECX % 0xFFF1;
    regEDI = regEDI % 0xFFF1;

    retVal = (regEDI << 16) | regECX;
    return( retVal );

    }

    ennyi lenne...

    Ha valaki tudna segíteni, és lefordítaná nekem, akkor azt nagyon szépen megköszönném!

Új hozzászólás Aktív témák