/* Replace "dll.h" with the name of your header */
//#include "dll.h"
#include <windows.h>
#include <wininet.h>
#define EXPFUNC __declspec(dllexport)


BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;

      case DLL_PROCESS_DETACH:
        break;

      case DLL_THREAD_ATTACH:
        break;

      case DLL_THREAD_DETACH:
        break;
    }

    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}


EXPFUNC bool __stdcall Function1(int argc, char* argv[])
{
	bool ok = false;

    // инициализируем WinInet
    HINTERNET hInternet = ::InternetOpen(TEXT("Function1"),
										 INTERNET_OPEN_TYPE_PRECONFIG,
										 NULL,NULL,
										 0);

    if (hInternet != NULL) {
        // открываем HTTP сессию
        HINTERNET hConnect = ::InternetConnect(hInternet,
											   TEXT("http://www.site.com/page1.php?par1=abc&par2=argc"),
											   INTERNET_DEFAULT_HTTP_PORT,  // HTTP, HTTPS, FTP, GOPHER, SOCKS, PORT_NUMBER
											   NULL,NULL,					// логин, пароль
											   INTERNET_SERVICE_HTTP,		// тип сервера HTTP, FTP, GOPHER
											   0,
											   0);

        if (hConnect != NULL) {
            // открываем запрос
            HINTERNET hRequest = ::HttpOpenRequest(hConnect,
												   TEXT("GET"),
												   TEXT("object1.asp"), // имя целевого объекта, (файл, скрипт, модуль)
												   NULL,
												   NULL,
												   0,
												   INTERNET_FLAG_KEEP_CONNECTION,
												   0);

            if (hRequest != NULL) {
                // посылаем запрос
                BOOL bSend = ::HttpSendRequest(hRequest, 
											   TEXT("Text"),	// дополнительные заголовки
											   4,				// количесиво букв заголовков
											   argv,			// указатель на данные
											   sizeof(argv)-1); 
                if (bSend) {
                    // создаём выходной файл
                    HANDLE hFile = ::CreateFile(TEXT("data.txt"), 
												GENERIC_READ|GENERIC_WRITE,
 												FILE_SHARE_READ, 
												NULL, 
												CREATE_ALWAYS, 
												FILE_ATTRIBUTE_NORMAL, 
												NULL);
                    if (hFile) 
						for (;;) {
							// читаем данные
							char  szData[4096];
							DWORD dwBytesRead, dwBytesWritten;
                        
							BOOL bRead = ::InternetReadFile(hRequest,
															szData, 
															sizeof(szData)-1, 
															&dwBytesRead); 

							// выход из цикла при ошибке или завершении
							if (bRead == FALSE  ||  dwBytesRead == 0) break;

							// сохраняем результат
							szData[dwBytesRead] = 0;

							WriteFile(hFile, 
									  szData, 
									  dwBytesRead, 
									  &dwBytesWritten, 
									  NULL); 

							ok = true;
						}
				}
				::InternetCloseHandle(hRequest);	// закрываем запрос
			}
			::InternetCloseHandle(hConnect);	// закрываем сессию
		}
		::InternetCloseHandle(hInternet);	// закрываем WinInet
	}

    // для полного счастья, запускаем считанный файл
    
    return ok;
}
