Problema al generar un exe de cpp

Iniciado por ahaugas, 23 Julio 2012, 19:29 PM

0 Miembros y 1 Visitante están viendo este tema.

ahaugas

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:

// 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
no subestimar al mas debil ya que tendra otras experiencias

bemone

Cual es tu problema especificamente? deja mas datos.
Odio los tipos de variable de Windows.

ahaugas

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
no subestimar al mas debil ya que tendra otras experiencias

bemone

Cita de: 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

Es un proyecto win32, ese creaste?
Odio los tipos de variable de Windows.

ahaugas

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 ==========
no subestimar al mas debil ya que tendra otras experiencias

ahaugas

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.
no subestimar al mas debil ya que tendra otras experiencias