Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ahaugas en 23 Julio 2012, 19:29 pm



Título: Problema al generar un exe de cpp
Publicado por: ahaugas en 23 Julio 2012, 19:29 pm
hola he encontrado un archivo cpp en un sitio y me gustaría compilarlo a un exe, pero la versión de visual studio 2008 no me deja.

me podeis echar una mano?
la verdad no se nada de este lenguaje pero me viene bien este ejecutable para sincronizar los archivos del servidor con el local:

dejo el source:
Código:
// by SlyBit (c) 07.2008 /DownloadFile.cpp/
 
#include "winsock2.h"
#include <windows.h>
 
#pragma comment(lib, "Ws2_32.lib")
#pragma comment(linker, "/ENTRY:Main")
 
#define HOST_NAME   "misitio.com"
#define URL_NAME    "/pub/21/files/RawRead.rar"
#define FILE_NAME   "RawRead.rar"
#define HEADER_SIZE 400
 
// Возводим число x в положительную целочисленную степень
#define DEGREE(Val, Deg) if(!Deg) { Val = 1; } else for(int i1=2, i2=Val; i1<=Deg; i1++) { Val *= i2; }                   

// Переводим число Str, представленное в виде строки в числовой вид Int
#define STR_TO_INT(Str, Int) for(int l=0, s=10; l<strlen(Str); l++, s=10) { DEGREE(s, (strlen(Str)-1-l)); Int += ((BYTE)Str[l]-0x30)*s; }
   
PCHAR WINAPI HTTPSendReceiveData(PVOID pInData, DWORD dwInDataSize, PCHAR pIpAddress, PDWORD pOutSizeSize)
{
    SOCKET      ConnectSocket;
    sockaddr_in ClientService;
    INT         nReceiveBytes, i, j = 0, nCurr;
    CHAR        szHeader[HEADER_SIZE] = "\0", szVal[10] = "\0";
    PCHAR       pOutData = 0;
 
    if(INVALID_SOCKET == (ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))) {
        return 0;
    }
     
    ClientService.sin_family = AF_INET;
    ClientService.sin_port = htons(80);
    ClientService.sin_addr.s_addr = inet_addr(pIpAddress);
   
    if(SOCKET_ERROR == connect(ConnectSocket, (SOCKADDR*)&ClientService, sizeof(ClientService))) {
        closesocket(ConnectSocket);
        return 0;
    }
   
    if(SOCKET_ERROR == send(ConnectSocket, (PCHAR)pInData, dwInDataSize, 0)) {
        closesocket(ConnectSocket);
        return 0;
    }
   
    // Получаем заголовок ответа
    if(SOCKET_ERROR == recv(ConnectSocket, szHeader, HEADER_SIZE, 0)) {
        closesocket(ConnectSocket);
        return 0;
    }
   
    for(i=0; i<HEADER_SIZE; i++)
    {
        // Получаем размер данных
        if(!memcmp("Content-Length: ", szHeader+i, strlen("Content-Length: ")-1))
        {
            do {
                szVal[j] = szHeader[i+strlen("Content-Length: ")+j]; j++;
            } while(szHeader[i+strlen("Content-Length: ")+j] != '\r');
           
            STR_TO_INT(szVal, *pOutSizeSize);
        }
        // Получаем указатель на начало файла в ответе
        if(!memcmp("\r\n\r\n", szHeader+i, strlen("\r\n\r\n")-1))
        {
            i += strlen("\r\n\r\n");
            break;
        }
    }
   
    if((HEADER_SIZE-1 == i) || !*pOutSizeSize) {
        return 0;
    }
 
    if(!(pOutData = (PCHAR)VirtualAlloc(0, *pOutSizeSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE))) {
        return 0;
    }
   
    if(HEADER_SIZE-i >= *pOutSizeSize) {
        memcpy(pOutData, szHeader+i, *pOutSizeSize);
    } else {
        nCurr = HEADER_SIZE-i;
        memcpy(pOutData, szHeader+i, nCurr);
       
        // Получаем оставшиеся данные   
        while(nReceiveBytes = recv(ConnectSocket, pOutData+nCurr, *pOutSizeSize-nCurr, 0))  {
            if(nReceiveBytes == SOCKET_ERROR) {
                closesocket(ConnectSocket);
                return 0;
            }
            nCurr += nReceiveBytes;
        }
    }
   
    closesocket(ConnectSocket);
   
    return pOutData;
}
   
BOOL WINAPI GetIpByHostName(PCHAR pHostName, PCHAR pIp, DWORD dwIpSize)
{
    hostent *pHosten;
   
    if(!(pHosten = gethostbyname(pHostName))) {
        return 0;
    }
   
    if(lstrlen(inet_ntoa(*(in_addr*)*pHosten->h_addr_list)) > dwIpSize) {
        return 0;
    }
   
    lstrcpy(pIp, inet_ntoa(*(in_addr*)*pHosten->h_addr_list));
   
    return 1;
}
   
BOOL WINAPI DownloadFile(PCHAR pFileName, PCHAR pHostName, PCHAR pUrl)
{
    CHAR    szIp[17], szSendData[300];
    PCHAR   pFile = 0;
    HANDLE  hFile;
    DWORD   dwFileSize = 0, dwRetSize;
   
    if(!GetIpByHostName(pHostName, szIp, 17)) {
        return 0;
    }
   
    wsprintf(szSendData, "GET %s HTTP/1.1\r\nHost: %s\r\n\r\n", pUrl, pHostName);
   
    if(!(pFile = HTTPSendReceiveData(szSendData, strlen(szSendData), szIp, &dwFileSize))) {
        return 0;
    }
   
    if(INVALID_HANDLE_VALUE == (hFile = CreateFile(pFileName, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0))) {
        VirtualFree(pFile, 0, MEM_RELEASE);
        return 0;
    }
   
    if(!WriteFile(hFile, pFile, dwFileSize, &dwRetSize, 0)) {
        VirtualFree(pFile, 0, MEM_RELEASE);
        CloseHandle(hFile);
        return 0;
    }
   
    VirtualFree(pFile, 0, MEM_RELEASE);
    CloseHandle(hFile);
   
    return 1;
}
   
VOID WINAPI Main()
{   
    WSAData wsaData;
   
    if(NO_ERROR != WSAStartup(MAKEWORD(2,2), &wsaData)) {
        ExitProcess(0);
    }
   
    if(DownloadFile(FILE_NAME, HOST_NAME, URL_NAME)) {
        MessageBox(0, "DownloadFile Ok", 0, 0);
    } else {
        MessageBox(0, "DownloadFile Error", 0, 0);
    }
   
    ExitProcess(0);
}

gracias de antemano


Título: Re: Problema al generar un exe de cpp
Publicado por: bemone en 23 Julio 2012, 20:39 pm
Cual es tu problema especificamente? deja mas datos.


Título: Re: Problema al generar un exe de cpp
Publicado por: ahaugas en 23 Julio 2012, 21:31 pm
pues directamente al abrir el archivo cpp y mandarlo a compilar pues no me deja la opcion, y al crear un nuevo proyecto tampoco.

la verdad desconozco para compilar este archivo y no se que dependencias tiene

gracias


Título: Re: Problema al generar un exe de cpp
Publicado por: bemone en 23 Julio 2012, 22:08 pm
pues directamente al abrir el archivo cpp y mandarlo a compilar pues no me deja la opcion, y al crear un nuevo proyecto tampoco.

la verdad desconozco para compilar este archivo y no se que dependencias tiene

gracias

Es un proyecto win32, ese creaste?


Título: Re: Problema al generar un exe de cpp
Publicado por: ahaugas en 23 Julio 2012, 22:23 pm
si he creado un proyecto win32 de consola y he creado nuevo archivo descargas.cpp
luego he pegado dentro el contenido, pero me tira errores.

alguna idea?

los errores son:
Citar
1>------ Operación Generar iniciada: proyecto: downloader, configuración: Debug Win32 ------
1>Compilando...
1>downloader.cpp
1>c:\users\84k3r-484u645\documents\visual studio 2008\projects\downloader\downloader\downloader.cpp(61) : warning C4018: '<' : no coinciden signed/unsigned
1>c:\users\84k3r-484u645\documents\visual studio 2008\projects\downloader\downloader\downloader.cpp(61) : warning C4018: '<=' : no coinciden signed/unsigned
1>c:\users\84k3r-484u645\documents\visual studio 2008\projects\downloader\downloader\downloader.cpp(79) : warning C4018: '>=' : no coinciden signed/unsigned
1>c:\users\84k3r-484u645\documents\visual studio 2008\projects\downloader\downloader\downloader.cpp(108) : error C2664: 'lstrlenW' : no se puede convertir el parámetro 1 de 'char *' a 'LPCWSTR'
1>        Los tipos señalados no están relacionados; la conversión requiere reinterpret_cast, conversión de estilo de C o conversión de estilo de función
1>c:\users\84k3r-484u645\documents\visual studio 2008\projects\downloader\downloader\downloader.cpp(112) : error C2664: 'lstrcpyW' : no se puede convertir el parámetro 1 de 'PCHAR' a 'LPWSTR'
1>        Los tipos señalados no están relacionados; la conversión requiere reinterpret_cast, conversión de estilo de C o conversión de estilo de función
1>c:\users\84k3r-484u645\documents\visual studio 2008\projects\downloader\downloader\downloader.cpp(128) : error C2664: 'wsprintfW' : no se puede convertir el parámetro 1 de 'CHAR [300]' a 'LPWSTR'
1>        Los tipos señalados no están relacionados; la conversión requiere reinterpret_cast, conversión de estilo de C o conversión de estilo de función
1>c:\users\84k3r-484u645\documents\visual studio 2008\projects\downloader\downloader\downloader.cpp(134) : error C2664: 'CreateFileW' : no se puede convertir el parámetro 1 de 'PCHAR' a 'LPCWSTR'
1>        Los tipos señalados no están relacionados; la conversión requiere reinterpret_cast, conversión de estilo de C o conversión de estilo de función
1>c:\users\84k3r-484u645\documents\visual studio 2008\projects\downloader\downloader\downloader.cpp(160) : error C2664: 'MessageBoxW' : no se puede convertir el parámetro 2 de 'const char [16]' a 'LPCWSTR'
1>        Los tipos señalados no están relacionados; la conversión requiere reinterpret_cast, conversión de estilo de C o conversión de estilo de función
1>c:\users\84k3r-484u645\documents\visual studio 2008\projects\downloader\downloader\downloader.cpp(162) : error C2664: 'MessageBoxW' : no se puede convertir el parámetro 2 de 'const char [19]' a 'LPCWSTR'
1>        Los tipos señalados no están relacionados; la conversión requiere reinterpret_cast, conversión de estilo de C o conversión de estilo de función
1>El registro de compilación se guardó en el "file://c:\Users\84K3R-484U645\Documents\Visual Studio 2008\Projects\downloader\downloader\Debug\BuildLog.htm"
1>downloader - 6 errores, 3 advertencias
========== Generar: 0 correctos, 1 incorrectos, 0 actualizados, 0 omitidos ==========


Título: Re: Problema al generar un exe de cpp
Publicado por: ahaugas en 23 Julio 2012, 23:08 pm
me aparece un mensaje de error al compilar:
Citar
Errores de compilacion. ¿desea continuar y ejecutar la ultima version generada correctamente?

pero el caso es que nunca se ha generado correctamente y la verdad no tengo ni idea de que puede ser.

lo unico que puedo pensar es que visual estudio 2008 no le vale y necesita uno superior o alguna version menor.

la verdad necesito hacer este ejecutable porque estoy haciendo un plugin para una web y me gustaria que sea mas comodo.

gracias.