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

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

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

Post by borr_1 »

К какому фрейму? к MSCFrame? так таймер и принадлежит этому классу - MSCFrame ты просто this пробовал? Или я чего-то не понял
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse
baytuch
Earned a small fee
Earned a small fee
Posts: 17
Joined: Fri Aug 24, 2012 2:45 pm
Location: Ukraine
Contact:

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

Post 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"));
  };
};

Немного не пойму...
OS: Slackware 12.2, IDE: KDevelop, xwWidgets version: 2.8.10, Compiler: GCC 4.2.4;
OS: Windows XP HE SP2 ( orig ), IDE: Code::Blocks 10.05, wxWidgets version: 2.8.12, Compiler: GCC 4.
borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

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

Post by borr_1 »

У тебя рация не на лампах, а на броневике!

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

Code: Select all

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

ЗЫ Этот вопрос к самим wxWidgets никакого отношения не имеет - это вопрос самого языка.
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse
baytuch
Earned a small fee
Earned a small fee
Posts: 17
Joined: Fri Aug 24, 2012 2:45 pm
Location: Ukraine
Contact:

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

Post by baytuch »

Заработало, спасибо большое...

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

Просто, я изначально думал, что это как-то связано с наследование классов ( учитывалось, когда формировался пост )... А что, нельзя задавать вопросы про "чистый" C++, если дело все равно касается программирования на wxWidgets? Просто, я ранее не особо активно использовал классы, как инструмент программирования, и мне немного сложно, а фреймворк — библиотека классов.
OS: Slackware 12.2, IDE: KDevelop, xwWidgets version: 2.8.10, Compiler: GCC 4.2.4;
OS: Windows XP HE SP2 ( orig ), IDE: Code::Blocks 10.05, wxWidgets version: 2.8.12, Compiler: GCC 4.
borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

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

Post by borr_1 »

baytuch wrote:А что, нельзя задавать вопросы про "чистый" C++, если дело все равно касается программирования на wxWidgets?
Можно... я так на всякий случай... пнул слегка.
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse
baytuch
Earned a small fee
Earned a small fee
Posts: 17
Joined: Fri Aug 24, 2012 2:45 pm
Location: Ukraine
Contact:

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

Post by baytuch »

Понял, учтем... :)
OS: Slackware 12.2, IDE: KDevelop, xwWidgets version: 2.8.10, Compiler: GCC 4.2.4;
OS: Windows XP HE SP2 ( orig ), IDE: Code::Blocks 10.05, wxWidgets version: 2.8.12, Compiler: GCC 4.
baytuch
Earned a small fee
Earned a small fee
Posts: 17
Joined: Fri Aug 24, 2012 2:45 pm
Location: Ukraine
Contact:

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

Post 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
OS: Slackware 12.2, IDE: KDevelop, xwWidgets version: 2.8.10, Compiler: GCC 4.2.4;
OS: Windows XP HE SP2 ( orig ), IDE: Code::Blocks 10.05, wxWidgets version: 2.8.12, Compiler: GCC 4.
borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

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

Post 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
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse
baytuch
Earned a small fee
Earned a small fee
Posts: 17
Joined: Fri Aug 24, 2012 2:45 pm
Location: Ukraine
Contact:

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

Post by baytuch »

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

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

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

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

Code: Select all

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

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

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

Народ, в общем, как-то выходит чет понемногу... Спасибо за подсказки, сам, наверное, еще бы долго гостил в Гугляндии [-o<
Last edited by baytuch on Wed Aug 29, 2012 11:08 am, edited 1 time in total.
OS: Slackware 12.2, IDE: KDevelop, xwWidgets version: 2.8.10, Compiler: GCC 4.2.4;
OS: Windows XP HE SP2 ( orig ), IDE: Code::Blocks 10.05, wxWidgets version: 2.8.12, Compiler: GCC 4.
baytuch
Earned a small fee
Earned a small fee
Posts: 17
Joined: Fri Aug 24, 2012 2:45 pm
Location: Ukraine
Contact:

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

Post by baytuch »

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

Image

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

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

Всё!..
OS: Slackware 12.2, IDE: KDevelop, xwWidgets version: 2.8.10, Compiler: GCC 4.2.4;
OS: Windows XP HE SP2 ( orig ), IDE: Code::Blocks 10.05, wxWidgets version: 2.8.12, Compiler: GCC 4.
baytuch
Earned a small fee
Earned a small fee
Posts: 17
Joined: Fri Aug 24, 2012 2:45 pm
Location: Ukraine
Contact:

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

Post by baytuch »

Также разобрался с проблемой компиляции под виндовс. Проблем была более чем адекватной — линковщику не были указаны все dll-файлы. Я их добавил и всё сразу собралось и запустилось...

List libs: libwxbase28ud_net.a, libwxbase28ud_xml.a

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

Windows XP SP2:
Image
OS: Slackware 12.2, IDE: KDevelop, xwWidgets version: 2.8.10, Compiler: GCC 4.2.4;
OS: Windows XP HE SP2 ( orig ), IDE: Code::Blocks 10.05, wxWidgets version: 2.8.12, Compiler: GCC 4.
Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

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

Post by Mojo »

baytuch wrote:Также разобрался с проблемой компиляции под виндовс. Проблем была более чем адекватной — линковщику не были указаны все dll-файлы. Я их добавил и всё сразу собралось и запустилось...

List libs: libwxbase28ud_net.a, libwxbase28ud_xml.a

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

Windows XP SP2:
Не плохо для начала и уж совсем роскошно для новичка.
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0
Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

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

Post by Mojo »

Хотя посмотрел код, какой уж там новичок... может быть новичок в wxWidgets, но не в программировании это точно :D
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0
baytuch
Earned a small fee
Earned a small fee
Posts: 17
Joined: Fri Aug 24, 2012 2:45 pm
Location: Ukraine
Contact:

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

Post by baytuch »

Не ожидал... Спасибо... :)

Нашел в этой демке серьезный ляп, который приводит краху приложения... Вообще не знаю, как оно могло работать с таким багом?.. ( сорцы перезалил )
OS: Slackware 12.2, IDE: KDevelop, xwWidgets version: 2.8.10, Compiler: GCC 4.2.4;
OS: Windows XP HE SP2 ( orig ), IDE: Code::Blocks 10.05, wxWidgets version: 2.8.12, Compiler: GCC 4.
ONEEYEMAN
Part Of The Furniture
Part Of The Furniture
Posts: 7459
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

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

Post 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.
Post Reply