Page 2 of 3

Re: Осваиваю библиотеку. Сложности.

Posted: Tue Aug 28, 2012 4:11 am
by borr_1
К какому фрейму? к MSCFrame? так таймер и принадлежит этому классу - MSCFrame ты просто this пробовал? Или я чего-то не понял

Re: Осваиваю библиотеку. Сложности.

Posted: Tue Aug 28, 2012 11:04 am
by baytuch
Ой... На написал самого главного :?

Ребята, в общем, не компилится код, если фрагмент, где находится обработчик, имеет такой вид:

Code: Select all

void MSCFrame::OnTimer( wxTimerEvent& event ){
//  wxMessageBox( wxT( "This is a wxWidgets Hello world sample" ),
//    wxT( "Сообщение от таймера" ), wxOK | wxICON_INFORMATION, this );
  frame->SetStatusText(wxT("Test"));
//  core(1, this);
};
/root/Desktop/dev/MSC/src/msc.cpp:75: error: 'frame' was not declared in this scope
Но, если так, то работает ( уже сегодня утром пробовал ):

Code: Select all

void MSCFrame::OnTimer( wxTimerEvent& event ){
//  wxMessageBox( wxT( "This is a wxWidgets Hello world sample" ),
//    wxT( "Сообщение от таймера" ), wxOK | wxICON_INFORMATION, this );
//  frame->SetStatusText(wxT("Test"));
  core(1, this);
};

Code: Select all

//Командный процессор
void core(int com, MSCFrame *frame){
  if ( com == 0 ){
//    wxSleep(10);
    frame->SetStatusText(wxT("Test"));
//    wxMessageBox( wxT( "This is a wxWidgets Hello world sample" ), wxT( "About Hello World" ), wxOK );
  };
  if ( com == 1 ){
    frame->SetStatusText(wxT("Test_timer"));
  };
};

Немного не пойму...

Re: Осваиваю библиотеку. Сложности.

Posted: Tue Aug 28, 2012 11:35 am
by borr_1
У тебя рация не на лампах, а на броневике!

Нужно пробовать так

Code: Select all

this->SetStatusText(wxT("Test"));// или просто SetStatusText(wxT("Test"));
Если хочешь через frame его нужно вынести в глобальную переменную.

ЗЫ Этот вопрос к самим wxWidgets никакого отношения не имеет - это вопрос самого языка.

Re: Осваиваю библиотеку. Сложности.

Posted: Tue Aug 28, 2012 12:03 pm
by baytuch
Заработало, спасибо большое...

Я где-то читал, что глобальные указатели — это плохо. Также у меня возникают проблемы, когда я пытаюсь объявить его, как "глобальный" — ошибка сегментации, падение приложения, когда срабатывает событие. Сделать по примеру,который мне привел Mojo, но проблема не пропала... Предполагаю, что это как-то связано с резервирование памяти под объект, но это вопрос уже точно по плюсах. Пока не критично... ( весной писал небольшую программку для работы с модемом, то такое частенько наблюдал ( начитался на эту тему )).

Просто, я изначально думал, что это как-то связано с наследование классов ( учитывалось, когда формировался пост )... А что, нельзя задавать вопросы про "чистый" C++, если дело все равно касается программирования на wxWidgets? Просто, я ранее не особо активно использовал классы, как инструмент программирования, и мне немного сложно, а фреймворк — библиотека классов.

Re: Осваиваю библиотеку. Сложности.

Posted: Tue Aug 28, 2012 12:14 pm
by borr_1
baytuch wrote:А что, нельзя задавать вопросы про "чистый" C++, если дело все равно касается программирования на wxWidgets?
Можно... я так на всякий случай... пнул слегка.

Re: Осваиваю библиотеку. Сложности.

Posted: Tue Aug 28, 2012 12:38 pm
by baytuch
Понял, учтем... :)

Re: Осваиваю библиотеку. Сложности.

Posted: Tue Aug 28, 2012 11:43 pm
by baytuch
Ребята, добрый день.
Извините, но я опять застрял. Пишу уже http - клиент. К слову, как раз с ним все нормально, но данные я получаю виде XML - документа... Немного полазил по мануалу и, к счастью, обнаружил, что wxWidgets имеет встроенный парсер, но воспользоваться им не могу... Судя по докам, этот класс способен работать с файлами и с потоком stream, который у меня есть... Но при попытке "подбросить" его парсеру, даже не компилится код -- компилер заявляет, что я пытаюсь подбросить не тот тип данных... Что еще скажу: спасайте, не работает... Конечно, мой сервер не генерит там больших документов, что не мешает сделать парсер "руками", но все же... Еще, как вариант, можно воспользоваться форматом "JSON" ( тоже реализовал, как резервный вариант ).

Code: Select all

#include <wx/wx.h>
#include <wx/socket.h>
#include <wx/sstream.h>
#include <wx/protocol/http.h>
#include "http_client.h"
#include "extern_variables.h"
#include <wx/xml/xml.h>

bool socket(){

  wxHTTP get;

  get.SetHeader(wxT("Content-type"), wxT("text/html; charset=utf-8"));
  get.SetHeader(wxT("User-Agent"), wxT("MSC"));

  get.SetTimeout(10);

  if ( get.Connect(wxT("vps.my-services.km.ua")) == false ){
    return false;
  };

  wxInputStream *stream = get.GetInputStream(wxT("/api/index.php?com=time&format=xml"));

  char* data = new char[1024];
  stream->Read(data, 1024);
  sys_string[10] = wxString::FromUTF8(data, 1024);

  //XML-parser
/*
  wxXmlDocument *xmlDoc;
  wxXmlNode *root_node, *tmp_node;
  xmlDoc = new wxXmlDocument();
  xmlDoc->Load(stream, wxT("UTF-8"), wxXMLDOC_NONE);
  root_node = xmlDoc->GetRoot();
*/

  return true;
};
*как вы можете видеть, я строчки парсера закомментировал. При компиляции выдает:
/root/Desktop/dev/MSC/src/http_client.cpp:53: error: conversion from 'wxInputStream*' to 'const wxString' is ambiguous

Re: Осваиваю библиотеку. Сложности.

Posted: Wed Aug 29, 2012 5:03 am
by borr_1
Конечно кто ж тебе сказал что в ImputSteam просто так можно строку засунуть. И вообще не понятно чего ты хочешь

Вот пример из доков по wxURL.

Code: Select all

wxURL url("http://a.host/a.dir/a.file");
  if (url.GetError() == wxURL_NOERR)
  {
      wxInputStream *in_stream;

      in_stream = url.GetInputStream();
      // Then, you can use all IO calls of in_stream (See wxStream)
  }
Может нужно что-т типа wxInputStream *stream = get.GetInputStream().

Обрати внимание wxHTTP wxFTP не работают через Proxy. Хотя в wiki есть SetProxyMode но что с ним дальше делать я так и не понял

http://wiki.wxwidgets.org/WxHTTP

Re: Осваиваю библиотеку. Сложности.

Posted: Wed Aug 29, 2012 10:59 am
by baytuch
Задача: подключится к хосту, который работает по протоколу HTTP 1.1; выполнит GET - запрос; получить документ ( XML - документ ); распорсить и отправить в extern-массив, возвратив true ( false - в случае ошибки )...

Но у меня практически все, как на этом примере. Забыл закрыть соединение, но з запросами все норм, так как данные я получаю ( это же заготовка )... Собсно вопрос в другом...

--------------------------------

"Звездочки" не хватало...

Code: Select all

xmlDoc->Load(*stream, wxT("UTF-8"), wxXMLDOC_NONE);
#-o

-------------------------------

Прокси мне не нужно, честно говоря, а вот SSL — очень даже... Но пока не просветлялся на эту тему...

Народ, в общем, как-то выходит чет понемногу... Спасибо за подсказки, сам, наверное, еще бы долго гостил в Гугляндии [-o<

Re: Осваиваю библиотеку. Сложности.

Posted: Thu Aug 30, 2012 2:16 am
by baytuch
Уже довольно давно хотел немного разобраться в этой библиотеке... Ну, вот... Свершилось... Также позвольте показать, шо же я там такое чудю :) Можно называть "Выкидышем" :) Это заготовка. Стояла задача: разобраться... Далее нужно будет продумать логику, дописать API... Тяжело с ужении — легко в бою, однако... Кста, под Виндовс не компилится... Шот упирается на wxHTTP. На больную голову делал — потом посмотрю...

Image

Source: http://www.my-services.km.ua/files/MSC/MSC_0.1.zip

*предполагаю, шо эта шмаказявка в конце — это символ перевода строки...

Всё!..

Re: Осваиваю библиотеку. Сложности.

Posted: Tue Sep 04, 2012 8:42 pm
by baytuch
Также разобрался с проблемой компиляции под виндовс. Проблем была более чем адекватной — линковщику не были указаны все dll-файлы. Я их добавил и всё сразу собралось и запустилось...

List libs: libwxbase28ud_net.a, libwxbase28ud_xml.a

Теперь моя прога работает на двух осях, чему очень рад!.. 8)

Windows XP SP2:
Image

Re: Осваиваю библиотеку. Сложности.

Posted: Wed Sep 05, 2012 4:07 pm
by Mojo
baytuch wrote:Также разобрался с проблемой компиляции под виндовс. Проблем была более чем адекватной — линковщику не были указаны все dll-файлы. Я их добавил и всё сразу собралось и запустилось...

List libs: libwxbase28ud_net.a, libwxbase28ud_xml.a

Теперь моя прога работает на двух осях, чему очень рад!.. 8)

Windows XP SP2:
Не плохо для начала и уж совсем роскошно для новичка.

Re: Осваиваю библиотеку. Сложности.

Posted: Wed Sep 05, 2012 4:15 pm
by Mojo
Хотя посмотрел код, какой уж там новичок... может быть новичок в wxWidgets, но не в программировании это точно :D

Re: Осваиваю библиотеку. Сложности.

Posted: Wed Sep 05, 2012 10:50 pm
by baytuch
Не ожидал... Спасибо... :)

Нашел в этой демке серьезный ляп, который приводит краху приложения... Вообще не знаю, как оно могло работать с таким багом?.. ( сорцы перезалил )

Re: Осваиваю библиотеку. Сложности.

Posted: Thu Sep 06, 2012 10:26 pm
by ONEEYEMAN
baytush,
Dlya togo chtoby obschatsya s internetom prosche i luchshe ispolzovat biblioteku "cURL".
wxHTTP ochen primitiven.

cURL - biblioteka obschenija s set'ju (ljuboj). Besplatnaja i s otkrytym kodom. V obraschenii prosta.

Sorry, pishu s raboty, a nas zdes vse tolko po angelski... :)

Spasibio.