Re[3]: использование структуры
От: TheThief Россия  
Дата: 18.01.10 09:00
Оценка: 3 (1)
Здравствуйте, qdrj, Вы писали:


Q>если попробовать объявить ее так:

Q>
Q>public: SERVICE_STATUS_PROCESS rdxStatus;
Q>

Q>то компилятор выдает:
Q>
Q>error C4368: cannot define 'rdxStatus' as a member of managed 'RDX_GUI::Form1': mixed types are not supported
Q>


Вам не структуру объявить надо, а переменную, которая будет доступна из обоих ф-ций...


    private: SERVICE_STATUS_PROCESS* m_prdxStatus;


        Form1(void)
        {
            m_prdxStatus = new SERVICE_STATUS_PROCESS();
            InitializeComponent();
            //
            //TODO: Add the constructor code here
            //
        }
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
            delete m_prdxStatus;
            m_prdxStatus = NULL;
        }

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) 
             {
                 SERVICE_STATUS_PROCESS &rdxStatus = *m_prdxStatus;

             }


ну как-то вот так
использование структуры
От: qdrj  
Дата: 17.01.10 12:08
Оценка:
мне необходимо создать простое gui-приложение для управления сервисом (страт/стоп/лог событий) на c++
в VS2008 создал WindowsFormApplication с помощью мастера, набросал эл-ты на форму и когда начал писать обработчики событий возникла проблема

при событии Form!_load выполняется след. код:
private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
            
            ...
            
            SERVICE_STATUS_PROCESS rdxStatus; //структура, в которой содержится информация о состоянии сервиса 
            
            ...
            
            if (!QueryServiceStatusEx(        //ф-я заполняет структуру rdxStatus
                    rdxService,                      
                    SC_STATUS_PROCESS_INFO,         
                    (LPBYTE) &rdxStatus,            
                    sizeof(SERVICE_STATUS_PROCESS), 
                    &bytesNeeded ) )
            {
                statusMessage = "QueryServiceStatusEx failed.";
                CloseServiceHandle(rdxService); 
                CloseServiceHandle(rdxSCManager);
            }

            ...
    }


а при событии button2_MouseClick мне необходима эта заполненная структура:
private: System::Void button2_MouseClick(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
    if ( !ControlService( 
            rdxService,                         // необходима структура заполненная при событии form1_load
            SERVICE_CONTROL_STOP, 
            (LPSERVICE_STATUS) &rdxStatus ) )
    {
        statusMessage = "ControlService failed.";
    } else {
        statusMessage = "Trying to stop VzletService...";
    }

    ...
}


Где и как следует объявить эту структуру, для того чтобы она была доступна из обоих функций?
Re: использование структуры
От: TheThief Россия  
Дата: 18.01.10 04:57
Оценка:
Здравствуйте, qdrj, Вы писали:

Q>Где и как следует объявить эту структуру, для того чтобы она была доступна из обоих функций?


Если я правильно понял вопрос, то вам нужно просто написать


#include "Windows.h"


в stdafx.h
Re[2]: использование структуры
От: qdrj  
Дата: 18.01.10 08:17
Оценка:
Здравствуйте, TheThief, Вы писали:

TT>Здравствуйте, qdrj, Вы писали:


Q>>Где и как следует объявить эту структуру, для того чтобы она была доступна из обоих функций?


TT>Если я правильно понял вопрос, то вам нужно просто написать



TT>
TT>#include "Windows.h"
TT>


TT>в stdafx.h


Наверное я плохо описал проблему. В button2_MouseClick нужна структура rdxStatus, но SERVICE_STATUS_PROCESS rdxStatus это локальная переменная для ф-ии Form1_Load(ее поля заполняются именно в Form1_Load), поэтому в button2_MouseClick она не доступна. Мне нужно объявить ее так, чтобы она была доступна в всех ф-х класса Form1.

public ref class Form1 : public System::Windows::Forms::Form {
    public: 
        Form1(void) { InitializeComponent(); }        


    protected: 
        ~Form1() { if (components) { delete components; } }
    private: System::Windows::Forms::Button^  button1;
    private: System::Windows::Forms::Button^  button2;
    private: System::Windows::Forms::Label^  label1;
    private: System::Windows::Forms::TextBox^  textBox1;

    private: System::Windows::Forms::Label^  label2;
    private: System::Windows::Forms::TextBox^  textBox2;

    protected: 

    private:
    System::ComponentModel::Container ^components;

    ...
    
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {}
    private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {}
    private: System::Void label1_Click(System::Object^  sender, System::EventArgs^  e) {}
    private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {            
        ...
    }
    private: System::Void button2_MouseClick(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e) {
    ...
    }
};


если попробовать объявить ее так:
public: SERVICE_STATUS_PROCESS rdxStatus;

то компилятор выдает:
error C4368: cannot define 'rdxStatus' as a member of managed 'RDX_GUI::Form1': mixed types are not supported
Re[4]: использование структуры
От: qdrj  
Дата: 18.01.10 10:06
Оценка:
заработало, большое спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.