Спасибо. Я так понял, под этот класс нужно диалог в ресурсах создавать?
Спасибо. Я так понял, под этот класс нужно диалог в ресурсах создавать?
Да. И выглядеть это описание будет примерно вот таким образом:
Code:RESOURCE DIALOG r_ip_query_dlg { flags = EGeneralQueryFlags; buttons = R_AVKON_SOFTKEYS_OK_CANCEL; items = { DLG_LINE { type = EAknExtCtQuery; id = EGeneralQuery; control = AVKON_DATA_QUERY { layout = EIpLayout; control = IP_FIELD_EDITOR { min_field_values=IP_FIELD { first_field=0; second_field=0; third_field=0; fourth_field=0; }; max_field_values=IP_FIELD { first_field=255; second_field=255; third_field=255; fourth_field=255; }; }; } ; } }; }
Спасибо. Поясните ещё, пожалуйста, как сделать следующее. С помощью TCommDbConnPref я могу выбрать точку доступа, но мне нужно её запомнить (сохранить в файл), чтобы при следующем запуске программы уже не выбирать, а сразу соединяться, использую эту точку. Я не понимаю, как это можно сделать. Что сохранять в файл? И как можно получить название точки доступа?
Пример чтения списка точек доступа (включая название) вы можете найти в нашей вики - Reading internet access points from the device. Сохраняйте ID точки доступа, это обычное числовое значение, а при повторном запуске используйте сохраненное значение.
Но у меня в таком коде prefs.IapId() всегда 0 возвращает почему-то.
Code:RConnection conn; TCommDbConnPref prefs; conn.Open(iSocketServ); prefs.SetDialogPreference(ECommDbDialogPrefPrompt); conn.Start(prefs); TUint32 a; a=prefs.IapId(); conn.Stop(); return ETrue;
IAP можно взять из самого RConnection, после того как он установил соединение:
Get current IAP of an RConnection
Даже не знаю, что делать? Последняя задача осталась в проекте - включать/выключать соединение с Интернетом без запроса. Написал по примеру, так что удивительно, минут 5 работает (это 30 включений/выключений) и вдруг появился диалог выбора точки доступа...
Мне кажется, что такое может происходить в случае, если, даже после закрытия соединения программой, GPRS некоторое время все ещё активен, а я опять пытаюсь отправить данные.Code:RConnection connection; User::LeaveIfError(connection.Open(iSocketServ)); TCommDbConnPref pref; pref.SetIapId(0); pref.SetDialogPreference(ECommDbDialogPrefDoNotPrompt); pref.SetDirection(ECommDbConnectionDirectionOutgoing ); connection.Start(pref);
Last edited by Djerom; 2010-05-26 at 21:15.
Можно ли сделать так, чтобы синхронная отправка данных через сокет завершалась также и через определённый промежуток времени, а не зависала на методе Send(), если данные не отсылаются?
Code:TRequestStatus status; ... status=KRequestPending; sock.Send(iBuffer,0,status); User::WaitForRequest(status);
Присвоение KRequestPending не нужно.
Code:TRequestStatus timerstatus; RTimer timer; timer.CreateLocal(); timer.After(timerstatus, KRetryInterval); TRequestStatus status; sock.Send(iBuffer,0,status); User::WaitForRequest(status, timerstatus); if (timerstatus != KRequestPending) { // сработал таймер } else { // завершился Send timer.Cancel(); }
Не получилось. Приводит к ошибке "e32user-cbase 46".
Last edited by Djerom; 2010-05-29 at 15:17.
Вы не в состоянии понять что значит эта ошибка? Или вы не можете найти ее описания? Вам ссылки на документы по активным объектам подкинуть?
Я не в состоянии понять, как работать с таймером по Вашему примеру, и почему возникает ошибка.
Активные объекты - это наше всеБез них в Symbian C++ практически ничего и сделать нельзя. Разбирайтесь.
http://wiki.forum.nokia.com/index.ph...86%D0%B8%D0%B8
Я перед тем, как спрашивать, эту страницу читал. И другое. Это мой первый код с двумя активными объектами. Видимо, они конфликтуют и я не могу понять - почему. Вот часть кода, где гарантировано выполнение Connect() завершается раньше, чем сработает таймер. Т. е., я просто запускаю и закрываю таймер. И это вызывает панику. Если же я создаю два WaitForRequest() - на Connect() и на таймер - все работает. Почему так - я не понимаю.
Code:TRequestStatus status; TRequestStatus timerstatus; RTimer timer; timer.CreateLocal(); timer.After(timerstatus,10000000); RSocket sock; User::LeaveIfError(sock.Open(iSocketServ,KAfInet,KSockStream,KProtocolInetTcp)); sock.Connect(iInetAddress,status); User::WaitForRequest(status,timerstatus); timer.Cancel(); timer.Close();
Вы не умеете работать с активными объектами. Они не конфликтуют. То что у вас получалось работать с одним, связано с тем, что вы работали с ним как с синхронным объектом, превращая его в таковой с помощью User::WaitForRequest(). Попытались работать с двумя и тут же допустили детскую ошибку. И если вы потрудитесь почитать описание этой паники и документы по АО, вы ее увидите.
Last edited by truf; 2010-05-30 at 12:54.