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

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 475
от 25.07.2006, 08:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 349, Экспертов: 41
В номере:Вопросов: 6, Ответов: 12


Вопрос № 49554: Здравствуйте Уважаемые Эксперты. Часто приходиться писать под разными пакетами, а именно: Borland C++ 5.02 Visual Studio C++ 6 Visual Studio C++ 7 Visual Studio C++ 8 Проблема с подключаемыми файлами: // В Visual Stud...
Вопрос № 49558: Прочитал книгу (Джесс Либерти и Бредли Джонс - Освой самостоятельно С++ за 21 день) - типа там 21 урок. Вот хотелось бы узнать какую книгу купить для дальнейшего обучения(можно несколько) P S:Хотелось бы писать НЕ консольные программы.И еще п...
Вопрос № 49564: Здравствуйте, Уважаемые Эксперты. Как настроить Borland C++ 5.02, чтобы тот подружился с русской кодировкой в Win-1251. Куда и что нужно тыкнуть....
Вопрос № 49597: Здравствуйте эксперты . Появился вопрос ! Вопрос: Как допустим DWORD перевести в ASCII ,,,???,,, Или так почему моя программа выдаёт что-то что я видеть вообше не собирался =) Код на Visual C++ #include "stdafx.h"<b...
Вопрос № 49639: Уважаемые эксперты! Я подключаюсь к BD Access через ODBC. С помощью функций SQLColumns и SQLTables можно получить описание столбца и таблицы, соотвестственно. Т.е. последний столбец результирующего множества этих функций. Вопрос: а как э...
Вопрос № 49642: Итак, ситуация в следующем: Имеется набор данных. Необходимо, чтобы к элементам был произвольный доступ и обеспечить возможность вставки данных в середину. Как лучше хранить данные? Обычный массив слишком медленно будет работать при встав...

Вопрос № 49.554
Здравствуйте Уважаемые Эксперты.
Часто приходиться писать под разными пакетами, а именно:
Borland C++ 5.02
Visual Studio C++ 6
Visual Studio C++ 7
Visual Studio C++ 8

Проблема с подключаемыми файлами:
// В Visual Studio C++ 6
#include <iostream.h>
// В Visual Studio C++ 7
#include <iostream> // без .h расширения

Вопрос: есть ли специальные макросы заложеные объявленые в пакете или семействе пакетов, чтобы можно было реализовать следующий песевдо-код:
#ifdef MAKROS_FOR_VISUAL_STUDIO_6
#include <iostream.h>
#elseif MAKROS_FOR_VISUAL_STUDIO_7
#include <iostream> // без .h расширения
#endif
Отправлен: 19.07.2006, 09:21
Вопрос задал: Zeitgeist (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: gitter
Здравствуйте, Zeitgeist!
Может я и ошибаюсь, но такого макроса, скорей всего, не существует (т.к. в Вашем случае конфликтуют Borland and Microsoft)
Но Вы сами нашли решение Вашей проблемы.
объявите в своём проекте, напрмер
#define MAKROS_FOR_XXX
и используйте Ваш вариант решения:

#ifdef MAKROS_FOR_VISUAL_STUDIO_6
#include
#elseif MAKROS_FOR_VISUAL_STUDIO_7
#include // без .h расширения
#endif

Удачи!
Ответ отправил: gitter (статус: Студент)
Ответ отправлен: 19.07.2006, 09:55

Отвечает: Physicist
Здравствуйте, Zeitgeist!

В MSDN можно найти список "Microsoft-Specific Predefined Macros", в частности, Вас должен интересовать макрос _MSC_VER, значение которого в Visual Studio 2003 равно 1200, для Visual Studio 2005 - 1300, для остальных версий - запустите в командной строке cl /? и посмотрите версию компилятора. Будет написано что-то вроде
Microsoft (R) 32-bit C/C++ Standard Compiler Version 12.00.8168 for 80x86
В этом случае _MSC_VER равен 1200 и т.д.
Ответ отправил: Physicist (статус: 7-ой класс)
Ответ отправлен: 19.07.2006, 10:46

Отвечает: arctic
Здравствуйте, Zeitgeist!
Етот макрос должен тебе помочь(привожу описание из MSDN):

_MSC_VER - Reports the major and minor versions of the compiler. For example, 1310 for Microsoft Visual C++ .NET 2003.
1310 represents version 13 and a 1.0 point release. The current compiler version is 1400.
Type cl /? at the command line to see the major and minor versions of your compiler along with the build number.

_MSC_VER - ето версия компилятора. В VC8 он равен 1400. В VC7 - 1310.
_MSC_VER можно проверить и таким способом:
cout << _MSC_VER << " - version of compiler" << endl;
Ответ отправил: arctic (статус: 2-ой класс)
Ответ отправлен: 19.07.2006, 10:53


Вопрос № 49.558
Прочитал книгу (Джесс Либерти и Бредли Джонс - Освой самостоятельно С++ за 21 день) - типа там 21 урок.
Вот хотелось бы узнать какую книгу купить для дальнейшего обучения(можно несколько)
P S:Хотелось бы писать НЕ консольные программы.И еще посоветуйте справочник по функциям, классам и т д вообщем справочник.
Отправлен: 19.07.2006, 10:26
Вопрос задал: АВС (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: arctic
Здравствуйте, АВС!
Для хорошего понимания языка C++ тебе нужно почитать автора языка: "Язык Програмирования C++", Москва, Издательство БИНОМ.
Для написания неконсольних программ рекомендую книгу которую сам изучаю: "Visual C++ и MFC", А.Мешков, Ю.Тихомиров, Издательство БХВ.
В етой книге подробно описана библиотека классов MFC. Можэт послужить справочником.
Но найлутшим справочником по функциям и классам есть MSDN(правда на английском языке).
Ответ отправил: arctic (статус: 2-ой класс)
Ответ отправлен: 19.07.2006, 11:10

Отвечает: gitter
Здравствуйте, АВС!
Рекомендую ещё книгу Шилдт Г. Самоучитель C++
Если Вы собираетесь разрабатывать не консольные приложения (оконные, например, под ОС семейчтва Windows), Вам стоит почитать книгу Ч. Петзольда Программирование для Windows (в двух частях)
Если Вы собираетесь разрабатывать приложения с использованием среды MS Visual Studio (6.0, 2003.Net, 2005.Net) Рекомендую начать с книги Д. Круглинский Программирование Microsoft Visual C++ или с книги Дж. Шеферд Программирование Microsoft Visual C++ .NET
Ещё рекомендую книгу Джефри Рихтера Программирование для Microsoft Windows
Из справочников могу порекомендовать того же Шилдта.

Удачи!
Ответ отправил: gitter (статус: Студент)
Ответ отправлен: 19.07.2006, 11:14

Отвечает: Sling
Здравствуйте, АВС!
Как учебник, лучший выбор - Герберт Шилдт, "Самоучитель С++". Правда это именно по языку, а не по конкретной среде разработки, но книга на редкость удачная.
---------
The fear of blood tends to create fear for the flesh
Ответ отправил: Sling (статус: 2-ой класс)
Ответ отправлен: 20.07.2006, 02:13


Вопрос № 49.564
Здравствуйте, Уважаемые Эксперты.
Как настроить Borland C++ 5.02, чтобы тот подружился с русской кодировкой в Win-1251.
Куда и что нужно тыкнуть.
Отправлен: 19.07.2006, 11:14
Вопрос задал: Zeitgeist (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Vest
Здравствуйте, Zeitgeist!
Не пойму какая конкретно у тебя проблема, но попробую предположить: если у тебя русский язык некорректно отображается в середе разработки, то попробуй исспользовать другой шрифт в разделе Options->Environment->Editor-Display. Выбери любой другой равноширинный шрифт, поддерживающий русскую кодировку, например, Courier New Cyr.
Если у тебя в консоле руссский не отображается, то тут так: либо он у тебя отобразиться когда консоль развёрнута во весь экран, либо, если ты будешь переводить шрифт их одной кодировки в другую: вида AnsiToOem или OemToAnsi (<windows.h>)
Пример привожу ниже

Приложение:

---------
Халявы не бывает

Ответ отправил: Vest (статус: 3-ий класс)
Ответ отправлен: 22.07.2006, 04:29


Вопрос № 49.597
Здравствуйте эксперты .
Появился вопрос !
Вопрос:
Как допустим DWORD перевести в ASCII ,,,???,,,
Или так почему моя программа выдаёт что-то что я видеть вообше не собирался =)
Код на Visual C++
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
FILE *f;
char zt[80];
char ds[80];
char buf[1];
HANDLE fg;
HWND hWnd;
DWORD pid;
DWORD adress=0x00000000;
DWORD adrss=0xFFFFFFFF;
DWORD lin=0x00000000;
///////////////////////////////////////////
cout<<"Enter name Window: "<<endl;
cin >> zt;
hWnd = FindWindow(0,zt);
if (hWnd=0){
cout << "Error... "<<endl;
}
GetWindowThreadProcessId(hWnd,&pid);
fg = OpenProcess(PROCESS_ALL_ACCESS|PROCESS_VM_READ,FALSE,pid);
if (fg=0){
cout <<"Error #2"<<endl;
}
///////////////////////////////////////
cout << "Enter file name: "<<endl;
cin >> ds;
f=fopen(ds,"wb+");
while(adress<adrss){
ReadProcessMemory(fg,&lin,&buf,1,NULL);

////////////////////////
if (buf!=0){
fwrite(&buf,1,15,f);
}
///////////////////////
lin++;
//////////////////////
}


return 0;
}
//////////////////////////////////////////////

Что хранится в памяти процесса тоесть окна или программки !
И не в Hex а в ASCII . Или ещё в чём нибудь чтобы было понятно !
Ну в коде всё понятно подскажите где я допустил ошибку !
Спасибо за внимание !
Отправлен: 19.07.2006, 17:35
Вопрос задал: Tamashev Denis M (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Physicist
Здравствуйте, Tamashev Denis M!

Насколько я понял, Вы пытаетесь процесть всю доступную память процесса и вывести ее в отдельный файл. Если так, то проблема не в переводе DWORD в ASC...

Я бы переделал цикл так (см. Приложение).
1. Обратите внимание, что lin и так содержит адрес области памяти, поэтому применение & меняет логику программы. Точно также buf является указателем на область памяти, содержащей 1 символ.
2. Нужно проверять результат ReadProcessMemory - если ошибка, он равен 0.
3. Раз Вы считали из памяти 1 символ, то и выводить в файл нужно один символ.

Приложение:

Ответ отправил: Physicist (статус: 7-ой класс)
Ответ отправлен: 19.07.2006, 18:08
Оценка за ответ: 5
Комментарий оценки:
Спасибо ! Но вот только в файл так ни чего не записалось !,,,
=(
Вообще ничего =(
Ну ладно спасибо буду думать !

Отвечает: Vest
Здравствуйте, Tamashev Denis M!
Здавствуй, хоть мой вариант и не возвращает правильного результата, хочу сказать, что у тебя здесь неск. ошибок: Во первых - все проверки, которые ты выполняешь на NULL, сделаны не правильно - НЕ равно нулю ( = 0) а (== 0). Тогда у тебя будут выскакивать ошибки на экране.
Во-вторых - проверь ответ от ReadProcessMemory. В нём говорилось если что, "неверный дескриптор", который получался от FindWindow и GetWindowThreadProcessId.
Ну и последнее, что я заметил - это то, что функция FindWindow работает с именем КЛАССА тоже, а ты его опускаешь. Я с помощью winsighta получил имя например некоторого окна, и имя его заголовка, но программа перестала выдавать ошибки, но всё-равно почему-то память не копировала. Не знаю, почему, может быть не было к ней доступа. Попробуй, если что - пиши. Ниже мой вариант (я переделал его для своег Borland C++ 5.02, если что в вижуале может что-нибудь не сработать)

Приложение:

---------
Халявы не бывает

Ответ отправил: Vest (статус: 3-ий класс)
Ответ отправлен: 22.07.2006, 04:58


Вопрос № 49.639
Уважаемые эксперты!
Я подключаюсь к BD Access через ODBC. С помощью функций SQLColumns и SQLTables можно получить описание столбца и таблицы, соотвестственно.
Т.е. последний столбец результирующего множества этих функций.
Вопрос: а как эти описания задать/изменить?
Отправлен: 20.07.2006, 01:36
Вопрос задал: A_m_v (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: EPDSota
Здравствуйте, A_m_v!

Один из вариантов использовать SQL запрос вида "Alter table ...".
---------
Открыть глаза навстречу солнцу
Ответ отправил: EPDSota (статус: Специалист)
Ответ отправлен: 21.07.2006, 08:20


Вопрос № 49.642
Итак, ситуация в следующем:
Имеется набор данных. Необходимо, чтобы к элементам был произвольный доступ и обеспечить возможность вставки данных в середину.
Как лучше хранить данные?
Обычный массив слишком медленно будет работать при вставке (нужно сдвигать всё, что после вставленного элемента). List - тоже (доступ последовательный, поэтому для вставки необходимо пройти по всем элементам до места вставки). Сейчас использую vector, но может есть лучшие варианты?
Для моей программы критична именно скорость. Сложность написания или объём используемой памяти не так важны.
Отправлен: 20.07.2006, 02:00
Вопрос задал: Sling (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sid123
Здравствуйте, Sling!
Увы, на сколько я знаю, STL не предоставляет такой структуры данных. Необходимая вам структура данных что-то типа skip-списков, но скорее всего вам придётся её реализовывать самому=)
Ответ отправил: Sid123 (статус: 1-ый класс)
Ответ отправлен: 20.07.2006, 08:07

Отвечает: Morgion
Здравствуйте, Sling!
Могу предложить такой вариант (на вскидку- для хорошего решения нужно читать книги по теории баз данных, точнее алгоритмах).
1. Данные добавляются в конец.
2. Использовать дополнительный массив с индексами. При вставке в исходный добавляется в конец, сдвигается

Пример массив значений(a) {b,c,d,e,f}, индексный(i) {3,2,5,4,1}. Обращение:
s[3] == [i[3]] == a [ 5 ] == f.
Вставка элемента g на 2-е место a=={b,c,d,e,f,g} i=={3,6,2,5,4,1} (то есть в исходный добавили в конец, в индексный в нужное место)
s[4] == a[i[4]] == a[5]== f
s[2] == a[i[2]] == a[6] == g
Затраты по скорости только при вставке элемента (сдвиг массива индексов) и при выборке - сначала из массива индексов, потом из исходного.
Ответ отправил: Morgion (статус: Студент)
Ответ отправлен: 20.07.2006, 10:15
Оценка за ответ: 5
Комментарий оценки:
Ну ёпрст. Я ж в этой же программе аналогично индексирование выполняю, только для другой цели. Спасибо, сам бы ещё долго думал, наверное :)


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное