Отправляет email-рассылки с помощью сервиса Sendsay

Инвестиции: Вопрос-Ответ

  Все выпуски  

C/C++ Вопрос-Ответ Выпуск № 29


Информационный Канал Subscribe.Ru

C/C++ Вопрос-Ответ

Выпуск      : 29
Подписчиков : 2608
Cайт        : SoftMaker.com.ru
Архив       : C/C++ Вопрос-Ответ (архив)
В этом выпуске
Программирование для Windows на C/C++.

Программирование для Windows на C/C++.

От ведущего

Здравствуйте уважаемые подписчики !

Как всегда, рад приветствовть вас на страницах этой рассылки.

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


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

Если вы хотите создать и вести какой либо раздел в этой рассылке - также пишите мне.

И, как всегда, вы можете задать свои вопросы по программированию на сайте в форуме.
Или обсудить их в дискуссионном листе "Программирование. форум !!!".

Многим может быть также интересна рассылка: Visual С++ - расширенное программирование, где можно прочитать описания нестандартных приемов программирования с помощъю библиотеки MFC - 'трюков', 'хаков', недокументированных функций.

С уважением, Вахтуров Виктор.

Подписчикам

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

Для того, чтобы задать свой вопрос, пришлите письмо, кликнув по этой ссылке.
Для того, чтобы ответить на вопрос, надо кликнуть по ссылке "ответить", расположенной под текстом вопроса.

Небольшое примечание. Господа, если Вы хотите, чтобы Ваш e-mail был опубликован в рассылке, специально и явно укажите это в письме. Иначе e-mail адреса, указанные в теле Вашего письма в рассылке опубликованы не будут.

Вопросы

Для того, чтобы задать свой вопрос, кликните этой ссылке (вопрос будет опубликован в следующем номере).
Вы можете задавать любые вопросы, касающиеся программирования на языке C и C++. Это могут быть вопросы, касающиеся как конструкций языка, применения библиотек классов, шаблонов (таких как MFC или STL), использования компиляторов, так и самой философии программирования на C или C++. Здесь нет ограничений - спрашивайте и получайте ответы.

Вопрос № 110 ( Хан Николай )

Здравствуйте,

Программирую на C++Builder, но вопрос будет немного офф...

Есть необходимость написать программу, отправляющую письма,
содержащие вложения (архив .rar) средствами MAPI. Прием писем будет
производиться программой TheBat! Программу написал, письма уходят,
НО!..

Наблюдается засада при отправке из Outlook 2К/ХР/2003 и приёмом батом
Приходит пустое письмо с вложением winmail.dat
Насколько я разобрался, это все из-за формата ms-tnef от Microsoft.
Бат его не понимает категорически. Перенестройки Аутлука
(создавать и отправлять все в текстовом формате) не дали никакого
результата (МАПИ от Аутлука создает все в формате ms-tnef или как
он отмечен в самом Аутлуке - RTF)

Тогда подредактировал win.ini
[Mail]
...
OLEMessaging=1 //попробовал поставить в 0

При этом приходит уже не пустое письмо - сабж и текст письма
читаются, но вместо вложения опять winmail.dat... При этом
заголовки отправленного письма те, которые нужны... Вместо ms-tnef
тип теперь octet-stream...

Подскажите где еще можно копать?..

Вот кусок кода, которым отправляется письмо:

....
#define CHECK(r)\
  if( r!=SUCCESS_SUCCESS )\
    throw Exception(AnsiString().sprintf("Письмо не было"
    " отправлено, код ошибки: %d.", r))
//----------------------------------------------------------
сlass TMailMessage
{
public:
  AnsiString ToAddress; // examle "smtp:adres@host.ru"
  AnsiString ToName; //display contact name
  AnsiString FromAddress;
  AnsiString FromName;

  AnsiString Subject; //mail message subject
  AnsiString Text; //mail message text

  std::vector<AnsiString> Attachments; //attachments files

  bool EditMessage;

  TMailMessage(HWND OwnerWnd) :Handle(OwnerWnd),
                               EditMessage(true) {};

  void __fastcall Send();

private:
  HWND Handle;

};
 ....
//----------------------------------------------------------
 ....
void __fastcall TMailMessage::Send()
{
  UINT hSession = 0;
  ULONG ret;

  MapiMessage msg;
  FillMemory(&msg, sizeof(MapiMessage), 0);

  msg.lpszSubject = Subject.c_str();
  msg.lpszNoteText = Text.c_str();

  MapiRecipDesc From;
  FillMemory(&From, sizeof(MapiRecipDesc), 0);
  From.ulRecipClass = MAPI_ORIG;
  if(!FromName.IsEmpty())
    From.lpszName = FromName.c_str();
  From.lpszAddress = FromAddress.c_str();
  msg.lpOriginator = &From;

  msg.nRecipCount = 1;
  MapiRecipDesc To;
  FillMemory(&To, sizeof(MapiRecipDesc), 0);
  To.ulRecipClass = MAPI_TO;
  if(!ToName.IsEmpty())
    To.lpszName = ToName.c_str();
  To.lpszAddress = ToAddress.c_str();
  msg.lpRecips = &To;

  msg.nFileCount = Attachments.size();
  if(msg.nFileCount > 0)
  {
    MapiFileDesc* files = new MapiFileDesc[msg.nFileCount];
    FillMemory(files, sizeof(MapiFileDesc)*msg.nFileCount,
                0);

    for(UINT i = 0; i < msg.nFileCount; i++)
    {
      files[i].nPosition = -1;
      files[i].lpszPathName = Attachments[i].c_str();
      files[i].lpFileType = NULL;
    }
    msg.lpFiles = files;
  }

  FLAGS flags(MAPI_LOGON_UI);
  if(EditMessage) flags|=MAPI_DIALOG;
  ret = MapiSendMail(hSession, 0, msg, flags, 0);
  CHECK(ret);

}

 ....

Ответить на вопрос

Вопрос № 111 ( ferter )

Кто нибудь помогите мне нужно написать прогу которая из file1.dat копирует в file2.dat
пока не встретит слово >7 символов. Я вот написал она компилится но не работает
и еще как построчно читать фаил например чтоб удалить комментарии из него на MFC

void CaaDlg::OnBnClickedButton1()
{
CString buffer;
CString buffer1;
CString buffer2;
int j=0;
CStdioFile InFile1("c:\\temp\\file1.dat", CFile::modeRead);
CFile InFile2("c:\\temp\\file2.dat", CFile::modeWrite);
InFile1.ReadString( buffer);
LPSTR ps = buffer.GetBuffer(1024);
LPSTR ps1 = buffer1.GetBuffer(1024);
LPSTR ps2 = buffer2.GetBuffer(1024);
for(int i=0;i<1024;i++)
{
j++;
ps[i]==ps1[i]; //почему ps[i] не записывает в ps1[i] ?

buffer.ReleaseBuffer();
buffer1.ReleaseBuffer();
if(ps[i]==' ')
{buffer.ReleaseBuffer();

j=0;}
if(j==7)
{ps1==ps2; // почему?
buffer1.ReleaseBuffer();
buffer2.ReleaseBuffer();
}

}

InFile2.Write( buffer2,strlen(buffer2));
InFile1.Close();
InFile2.Close();

}

Ответить на вопрос

Вопрос № 112 ( synops )

Приветствую всех читателей рассылки!

Долго разбирался с обработкой исключений и другими интересными вещами.
Теперь возникла мысль сделать свою библиотеку для отлавливания ошибок в программе. Точнее это должна быть библиотека которая ловит все необработанные исключения (наверно надо будет подменить корневой обработчик исключений) и производит запись в лог файл.

Отсюда возникло несколько вопросов:

1. Каким образом можно "размотать" стек, узнав адреса функций, которые вызывались до возникновения исключения ? И хотелось бы еще узнавать при этом все имена этих функций, если такое вообще возможно.
2. Возможно ли, и если да то как узнать номер строки программного кода, где произошло исключение ?
3. И как можно узнать есть ли в программе утечки памяти как это делает дебаггер.

Все это думаю делать на VC++.

Ответить на вопрос

Ответы

Ниже приведены вопросы предыдущего выпуска и ответы на них.

Вопрос № 107 ( Unknown )

From Unknown

Здравствуйте! Вопрос у меня про сеть.
Примерно с полгода я заинтересовался создавать сетевые приложения, и
все было хорошо, пока мне не понадобилось прослушивать порты для
нахождения серверов. Пишу я на Билдере.

Буду благодарен за ответ.

Ответ ( Alexander Starostenko )

Hello q,

а что могло быть хорошо? что можно успеть сделать в сетевом приложении
до того, как начал прослушивать порты???
и вообще ячто то не понял в чем вопрос?

Ответ ( Vladimir )

Сокеты юзай. TServerSocket, TClientSocket. Если тебе нужен какой-то особенный сервис, то проще использовать Indy.
Вопрос № 108 ( Alex Lebedz )

Я пишу программу на Visual C++ 6.0. Сталкнулся с таким вопросом: в
программе есть элементы CTree и CView (каждому элементу дерева
(расположены в 4-ех ветвях)соответствует изображение Bitmap).
Необходимо реализовать перетаскивание элементов из CTree в CView.
Зарание спасибо.

Ответ ( 3V )

Самое простое решение - использовать стандартный Drag-and-Drop.
В MFC есть классы: COleDataSource, COleDropTarget - их и используй.
Если нет необходимости таскать данные из приложения в приложение, и как у тебя - есть лишь один возможный получатель, то весь Drag-and-Drop умещается в одну функцию-обработчик события начала перетаскивания от Tree-контрола. Всего 15-20 строк кода.

Если надо - пиши еще, приведу пример кода.
Вопрос № 109 ( Александр Паршин )

Как сделать прогу MDI форму, без MFC (желательно похожей на Фотошоп,
там есть тулбар в режиме Modeless, а не Modal.

Ответ ( 3V )

Тулбары и так обычно все в "режиме Modeless".
Без MFC - все также. Создаешь визардом проект "Win32 Application" - и вперед. Регистрируешь класс главного окна, пишешь оконную функцию, цикл обработки сообщений.

А "тулбар" как в фотошопе можно сделать на основе обычного немодального диалога (см. функции: CreateDialogParam, CreateDialogIndirectParam), ну или просто окна с заголовком и стилем WS_EX_TOOLWINDOW.
Анонсы книг по C/C++
SmogDX - объектно-ориентированная графика для Windows (DirectX и Visual C++)
SmogDX - объектно-ориентированная графика для Windows (DirectX и Visual C++)

Автор: В. А. Дебелов, Ю. А. Ткачев

Книга посвящена вопросам программирования динамических графических приложений в среде MS Windows на базе суперсистемы DirectX фирмы Microsoft.

Авторы разработали и представили объектно-ориентированную оболочку для основных графических частей:
  • DirectDraw - двумерной динамической графики и
  • Direct3D - трехмерной динамической графики.

При написании книги авторы избрали конструктивный подход, они вместе с читателем строят новую систему SmogDX и при этом изучают базовое обеспечение - DirectX. Таким образом, читатель не только знакомится с системой SmogDX, но и изучает наиболее существенные функциональные средства DirectX. В связи с этим данную книгу можно рассматривать и как учебное пособие по введению в программирование на DirectDraw и Direct3D.

Книга заполняет нишу литературы и пособий на русском языке по применению DirectX, ориентирована на широкий круг программистов разного уровня подготовки: школьников, студентов, научных работников.

Страница книги на Озоне
Архитектура .NET и программирование на Visual C++ (.NET Architecture and Programming Using Visual C++)
Архитектура .NET и программирование на Visual C++ (.NET Architecture and Programming Using Visual C++)

Автор: Роберт Оберг и Питер Торстейнсон

Эта книга представляет собой практическое руководство по программированию на Visual C++ для платформы .NET. Прочитав книгу, вы научитесь использовать Visual Studio .NET с целью создания самых сложных приложений для новой платформы .NET, которую разработала Microsoft.

В начале книги автор объясняет, что такое Microsoft .NET, и излагает основные идеи, лежащие в основе модели программирования, использующей библиотеку классов .NET Framework, а затем вводятся управляемые расширения языка C++ и рассматриваютсяприемы программирования на управляемом C++. Все вводимые основные идеи иллюстрируются на конкретном примере, который затем прорабатывается до конца книги. Подробно рассмотрев такие важные понятия как интерфейсы, делегаты и события, автор приступает к систематическому изложению фундаментальных понятий, касающихся библиотеки классов .NET Framework. Пользуясь введенными понятиями, автор подробно рассказывает о программировании пользовательского интерфейса с использованием классов Windows Forms. Затем автор переходит ко всестороннему обсуждению вопросов, связанных с развертыванием приложений. После этого рассматриваются:

  • метаданные,
  • сериализация (преобразование в последовательную форму),
  • поточная обработка данных,
  • атрибуты,
  • асинхронное программирование,
  • удаленные вычисления,
  • а также управление памятью.
Далее автор сосредотачивается на подробном освещении технологии доступа к базам данных ADO.NET, и дает основательное введение в Web-программирование на основе технологии ASP.NET и простого протокола доступа к объектам SOAP (Simple Object Access Protocol). В заключение рассматриваются защита, отладка, и вопросы функциональной совместимости платформы .NET с традиционными COM-приложениями, а также приложениями, построенными на платформе Win32.

Книга предназначена для подготовленных программистов-практиков.

Страница книги на Озоне
Рассылки и дискуссионные листы компьютерной тематики
Рассылки
Программирование на JavaScript

Все аспекты программирования на JavaScript - нестандартные приемы, ОРИГИНАЛЬНЫЕ скрипты, авторские статьи и наработки. "JavaScript solutions" - в каждом выпуске готовый к применению ИНТЕРЕСНЫЙ скрипт (исходный код с комментариями).

Дискуссионные листы
Программирование. Форум !!!

Самый популярный дискуссионный лист по программированию на subscribe.ru, существующий с момента открытия сервиса дискуссионных листов !

Задайте здесь любой вопрос по программированию - и Вы получите ответ. Участвуйте в оживленных дискуссиях, обсуждайте интересные темы. Давайте ответы сами. Ведь это форум !!! Здесь просто интересно ! Присоединяйтесь !

Вебстроительство. Форум !!!

В дискуссионном листе ведется обсуждение различных аспектов создания сайтов - написание скриптов, использование, настройка портальных движков, и многое другое. Присоединяйтесь !

Поисковые системы. Форум !!!

Этот дискуссионный лист посвящен обсуждению поиковых систем, методов индексации сайтов поисковиками, способам оптимизации сайта под поисковые системы.

Хостинг. Обзоры и обсуждения платного и бесплатного хостинга.

Вы ищете хостинг (платный, бесплатный) ? Хотите спросить совета в выборе ? Можете обсудить это здесь. Поделитесь советом, если знаете. Или узнайте больше. Все о хостинге.


Всего доброго. До встречи в следующем номере.

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.cppqa
Архив рассылки
Отписаться
Вспомнить пароль

В избранное