Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > .NET > Windows Forms
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 22.08.2010, 20:24   #1
Flay
Пользователь
 
Регистрация: 22.08.2010
Адрес: Первоуральск
Сообщений: 26
Репутация: 10
По умолчанию Thread в Windows From Application

Прошу Вашей помощи в разборке использования thread в WFA.
у меня такая проблема. Создаю thread в UPDATE классе:
Код:

hthrSocketRead = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)LoadRevision, this, NULL, &thrSocketRead);

Функция thread:
Код:

DWORD WINAPI UPDATE::LoadRevision(LPVOID Send)
{
	GetCurrentDirectory(256, Send->currentdir);
}

В таком случае MS VS 2010 выдает ошибку:
error C2039: 'hInetfile' : is not a member of 'System::Void'

Если Send->currentdir заменить на просто currentdir:
error C2597: illegal reference to non-static member 'UPDATE::hInetfile'

Если же переменную hInetfile сделать статической:
Код:

static HINTERNET		hInetfile;

То вылазит ошибка:
Update.obj : error LNK2001: unresolved external symbol "public: static void * UPDATE::hInetfile" (?hInetfile@UPDATE@@2PAXA)

Помогите решить проблемму пожалуйста
Flay вне форума   Ответить с цитированием
Старый 22.08.2010, 20:33   #2
BOBAH13
Android Developer
Профессионал
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Адрес: Los Angeles, USA
Сообщений: 3,710
Репутация: 1457
По умолчанию

Код:

LPVOID Send

У вас тип данных LPVOID - *void а значит указатель ни на что )) т.е. вам стоит сделать так
Код:

((MyStructure*)Send)->MyStructureMember

- приведение типов данных
__________________
Home | Android for food | XWindows Dock | github
BOBAH13 вне форума   Ответить с цитированием
Старый 22.08.2010, 22:58   #3
Flay
Пользователь
 
Регистрация: 22.08.2010
Адрес: Первоуральск
Сообщений: 26
Репутация: 10
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Код:

LPVOID Send

У вас тип данных LPVOID - *void а значит указатель ни на что )) т.е. вам стоит сделать так
Код:

((MyStructure*)Send)->MyStructureMember

- приведение типов данных
спасибо, скомпилилось все без ошибок, но почему то значения:
((UPDATE*)Send)->status
и
status
разные при отладке показывает структуру this, в которой присутствует переменная hInetfil равная должному значению = 1. При наведении же на hInetfil в редакторе, показывает другое значение (87546768) и далее все выполняется с неверным значением.
при выполнении:
int st = ((UPDATE*)Send)->status;

st становится равным 87546768

Последний раз редактировалось Flay; 22.08.2010 в 23:25.
Flay вне форума   Ответить с цитированием
Старый 23.08.2010, 22:32   #4
Flay
Пользователь
 
Регистрация: 22.08.2010
Адрес: Первоуральск
Сообщений: 26
Репутация: 10
По умолчанию

помогите пожалуйста знающие эксперты. вся надежда на Вас. ну никак не могу разобраться в этом :-(
такое очучение что он передает адрес переменной, а не переменную. как получить переменную? вариант с __asm меня не очень устраивает

Последний раз редактировалось Flay; 23.08.2010 в 22:34.
Flay вне форума   Ответить с цитированием
Старый 24.08.2010, 13:53   #5
BOBAH13
Android Developer
Профессионал
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Адрес: Los Angeles, USA
Сообщений: 3,710
Репутация: 1457
По умолчанию

Ну так показывайте полный пример, что куда и как шлете и вызываете ?
__________________
Home | Android for food | XWindows Dock | github
BOBAH13 вне форума   Ответить с цитированием
Старый 24.08.2010, 18:14   #6
Flay
Пользователь
 
Регистрация: 22.08.2010
Адрес: Первоуральск
Сообщений: 26
Репутация: 10
По умолчанию

form1.h:
Код:

#pragma once
#include "Update.h"
Start run;
namespace Launcher {

	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;

	/// <summary>
	/// Summary for Form1
	/// </summary>
	public ref class Form1 : public System::Windows::Forms::Form
	{
	public:
		Form1(void)
		{
			InitializeComponent();
			//
			//TODO: Add the constructor code here
			//

		}
...
	public: 

		void test()
		{
			UPDATE			upd;
			upd.StartUpdate(button1, uptext, progress);
		}
...

private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
			 test();
		 }

update.h:
Код:

#pragma once
#include <Windows.h>
#include <Wininet.h>
#include <zlib.h>
#include "hash_md5.h"

class UPDATE
{
public:
	void StartUpdate(System::Windows::Forms::Button^ but, System::Windows::Forms::Label^ text, System::Windows::Forms::PictureBox^ progress);

	int			status;
...
	static DWORD WINAPI UPDATE::LoadRevision(LPVOID Send);

update.cpp
Код:

void UPDATE::StartUpdate(System::Windows::Forms::Button^ but, System::Windows::Forms::Label^ text, System::Windows::Forms::PictureBox^ progress)
{
		hthrSocketRead = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)LoadRevision, this, NULL, &thrSocketRead);
}
...
DWORD WINAPI UPDATE::LoadRevision(LPVOID Send)
{
		int st = ((UPDATE*)Send)->status;
...

Flay вне форума   Ответить с цитированием
Старый 24.08.2010, 18:37   #7
BOBAH13
Android Developer
Профессионал
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Адрес: Los Angeles, USA
Сообщений: 3,710
Репутация: 1457
По умолчанию

Код:

DWORD WINAPI UPDATE::LoadRevision(LPVOID Send)
{
    UPDATE *update = (UPDATE*)Send; // тут можете проверить update
    int st = update->status;

Все верно. Если не работает, внимательней подойдите к коду и проверьте логику еще раз.
__________________
Home | Android for food | XWindows Dock | github
BOBAH13 вне форума   Ответить с цитированием
Старый 24.08.2010, 21:28   #8
Flay
Пользователь
 
Регистрация: 22.08.2010
Адрес: Первоуральск
Сообщений: 26
Репутация: 10
По умолчанию

Всё перепроверил. Адрес передается верный. Но как будто что то изменяет переменные, хотя нигде кроме как в thread больше нет обращений к переменным класса update.

разобрался с этой бедо наконец.
просто вынес определение класса из файла from.h и теперь все работает

Последний раз редактировалось Flay; 25.08.2010 в 00:55.
Flay вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книга по Windows Form Application Skynet91 Общие вопросы C/C++ 0 20.03.2010 09:51
Создание приложений Windows Application Александр Елис Помощь студентам 6 20.10.2009 22:24
Windows Forms Application Cdevelop Общие вопросы .NET 1 15.03.2009 19:03


05:48.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru