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

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


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

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

Выпуск № 708
от 12.04.2007, 16:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 476, Экспертов: 78
В номере:Вопросов: 5, Ответов: 13


Вопрос № 81344: Доброго времени суток, уважаемые эксперты! Помогите, пожалуйста, мне с одной проблемой. Пишу программу на C++ Builder 6.0. В приложении текст программы, в которой возникает ошибка. Суть такова. Я создаю свой класс TMyClass. Помещ...
Вопрос № 81372: Уважаемые эксперты! В С++ пытаюсь запустить программу и получаю сообщение "MSVCP80D.dll не был найден" Пытался переустановить программу - не помогает, писал программу заново - не помогает!...
Вопрос № 81374: Здравствуйте Эксперты! Пишу в Builder C++ 2006. Сталкнулся с такой проблемой. Рисую на канве компонента Image. При увеличени размера формы мне нужно чтобы размеры Image тоже увеличивались, так вот размеры Image увеличиваются а размеры канвы остаю...
Вопрос № 81379: Здравствуйте, уважаемые эксперты! Решил ознакомиться с языком программирования С++, поставил С++ Builder 6. Возниклы следущие вопросы: 1. Расскажите, как работать с Ini файлами и Реестром (основные функции). 2. Каким образом мне перевесли...
Вопрос № 81445: Всем доброго времени суток! Вот приспичило мне написать программу перехвата для одной проги(типа r_admin, короче управление компьютерным клубом), суть такова что мне нужно знать что за пакеты она шлет, притом в этих пакетах точно содержится текст...

Вопрос № 81.344
Доброго времени суток, уважаемые эксперты!

Помогите, пожалуйста, мне с одной проблемой.
Пишу программу на C++ Builder 6.0.
В приложении текст программы, в которой возникает ошибка.
Суть такова. Я создаю свой класс TMyClass. Помещаю объект этого класса (MyObject) в описание класса формы (т.е. делаю его членом класса TForm1). Мне нужно методом MakeSmth класса TMyClass произвести кое-какие действия с использованием визуальных компонентов формы и ее обычных членов (на примере - PaintBox'a и метода Line).
В результате, когда вызываю Form1->MyObject.MakeSmth(); , происходит ошибка адресации на строке с вызовом этого метода. Что я неправильно делаю?

Приложение:

Отправлен: 06.04.2007, 17:18
Вопрос задал: Ferruccio Bonipiero (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: kool
Здравствуйте, Ferruccio Bonipiero!
Во-первых PaintBox1 и Button1 - не иниированы.
А значит они указывают в никуда т.е. на
невыделенную память - результат - ошибка
обращения к памяти.
Где-нибудь нужно выделить память
Например так ...->PaintBox1 = new TPaintBox.
Удачи!

---------
I am.
Ответ отправил: kool (статус: Студент)
Ответ отправлен: 06.04.2007, 19:40

Отвечает: John Paramol
Здравствуйте, Ferruccio Bonipiero!

Обратите внимание на строку extern PACKAGE TForm1 *Form1;
Макрос PACKAGE на самом деле раскрывается в выражение вида __declspec(package).
Этот модификатор обеспечивает импортирование/экспортирование экземпляров класса из пакетов (packages).
Это расширение языка C++ Builder, созданное для поддержки библиотек VCL и CLX. Таким образом, это не входит в стандарт ANSI С++, и, если Вы изучаете программирование на C++, а не программирование в среде C++ Builder, то не стоит заострять особого внимания на этом.
Но, кроме того, это анулирует свойство спецификатора extern связывать объявленный объект с определенным внешним объектом. Это означает, что если обращаться к объекту Form1 внутри файла UNIT1.H, то при этом будет возникать либо ошибка адресации, либо будет использован другой объект, который отличается от Form1, определенном в UNIT1.CPP.

Таким образом, ваш код будет работать при одном из следующих изменений:
- если убрать макрос PACKAGE из объявления Form1 в заголовочном файле
- если перенести определения методов классов из заголовочного файла в файл cpp.

Могу только дать один совет. Не помещайте определения методов класса внутри заголовочного файла, а помещайте их внутри соответствующего ему файла cpp.
---------
1=2, at values 1 large enough
Ответ отправил: John Paramol (статус: 7-ой класс)
Ответ отправлен: 06.04.2007, 22:06
Оценка за ответ: 5

Отвечает: Ilkras
Здравствуйте, Ferruccio Bonipiero!
Вы написали текст функции TMyClass::MakeSmth() в хедере. Значит компилироваться он будет в каком-то другом файле. В файле, в котором Form1 может быть как то переопределен. Далее этот хедер может быть включен в текст больше одного раза, он может быть включен в разные файлы - вобщем полный бардак.
Вынесете текст функций в "срр" файл. Постройте заново и если будет ошибка присылайте текст ее.
Ответ отправил: Ilkras (статус: 6-ой класс)
Ответ отправлен: 07.04.2007, 09:40
Оценка за ответ: 5


Вопрос № 81.372
Уважаемые эксперты! В С++ пытаюсь запустить программу и получаю сообщение "MSVCP80D.dll не был найден" Пытался переустановить программу - не помогает, писал программу заново - не помогает!
Отправлен: 06.04.2007, 21:37
Вопрос задал: Dsi270282 (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Azemtsov
Здравствуйте, Dsi270282!
Вероятно , какие-то проблемы с Framework, который обычно ставится вместе с Microsoft Visual Studio. Попробуйте переустановить Framework. Возможно, поможет.
Удачи.
Ответ отправил: Azemtsov (статус: 2-ой класс)
Ответ отправлен: 06.04.2007, 21:45

Отвечает: Uz Ab cd
Здравствуйте, Dsi270282!

Судя по всему эта библиотека подключена у тебя динамическе, по пробуй подключить её статическе.
Далее я напишу способ устранения этой проблемы:
Зайди в свойства проекта Property Pages->Configuration Properties->C/C++->Code Generation->Runtime Library->Multi-threaded(/MT).
После таких настроек размер EXE файла не множко увеличится, зато программа будет работать даже на тех компьютерах на которых этой библиотеки нет

Источник: http://forum.pmg.org.ru
---------
Большому кораблю - большой айсберг
Ответ отправил: Uz Ab cd (статус: 3-ий класс)
Ответ отправлен: 07.04.2007, 10:32
Оценка за ответ: 5

Отвечает: Neolot
Здравствуйте, Dsi270282!
Найдите этот файл в Google, скачайте и положите в папку System32.
---------
Глупость - это не отсутствие ума, это такой ум! (с) Александр Лебедь
Ответ отправил: Neolot (статус: 5-ый класс)
Ответ отправлен: 10.04.2007, 11:53


Вопрос № 81.374
Здравствуйте Эксперты!
Пишу в Builder C++ 2006. Сталкнулся с такой проблемой. Рисую на канве компонента Image. При увеличени размера формы мне нужно чтобы размеры Image тоже увеличивались, так вот размеры Image увеличиваются а размеры канвы остаются такими же и на новом(увеличенном) участве рисуемое изображени не видно. Подскажите пожалуйсто как иправить.

Приложение:

Отправлен: 06.04.2007, 22:01
Вопрос задал: Gray (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: John Paramol
Здравствуйте, Gray!
Возмодно, у вашего объекта Image1 свойство AutoSize выставлено в true. Можно выставить его в false. Или же вместе с изменением размеров Image1 изменяйте размеры Image1->Picture->Bitmap.
Удачи
---------
1=2, at values 1 large enough
Ответ отправил: John Paramol (статус: 7-ой класс)
Ответ отправлен: 06.04.2007, 22:22
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое разобрался с вашей помощью!

Отвечает: Unreal2004
Здравствуйте, Gray!

Вот такой код работает корректно
Image1->Width = Form1->Width - 50;
Image1->Height = Form1->Height - 50;
Image1->Picture->Bitmap->Width = Form1->Width - 50;
Image1->Picture->Bitmap->Height = Form1->Height - 50;
Image1->Canvas->Rectangle(0,0,Image1->Width,Image1->Height);

Ответ отправил: Unreal2004 (статус: 2-ой класс)
Ответ отправлен: 07.04.2007, 08:50
Оценка за ответ: 5
Комментарий оценки:
Спасобо! То что надо!


Вопрос № 81.379
Здравствуйте, уважаемые эксперты!
Решил ознакомиться с языком программирования С++, поставил С++ Builder 6. Возниклы следущие вопросы:
1. Расскажите, как работать с Ini файлами и Реестром (основные функции).
2. Каким образом мне перевесли переменную типа Ansistring в char [100] ( я хочу записать в файл содержимое Label1->Caption в файл).
Отправлен: 06.04.2007, 23:13
Вопрос задал: Win2k (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: ramok
Здравствуйте, Win2k!

1. TIniFile класс работы с ini файлами
TRegistry класс работы с реестром
примеры
http://netcode.ru/cpp/?katID=2&skatID=17&artID=89
http://netcode.ru/cpp/?lang=&katID=2&skatID=17&artID=91

2. используя метод класса c_str()
пример
http://www.codenet.ru/progr/bcb/ansistring.php
Ответ отправил: ramok (статус: Специалист)
Ответ отправлен: 07.04.2007, 01:30
Оценка за ответ: 5
Комментарий оценки:
Большое Вам спасибо!

Отвечает: Unreal2004
Здравствуйте, Win2k!

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

TIniFile - для работы с INI файлами. В хелре есть полный пример работы сэтим классом
TRegistry - для работы с реестром. в хелпе есть полный пример

У AnsiString есть оператор c_str(), который возвращает указатель на строку с нулем на конце.
получается что то типа
fwrite(Label1->Caption.c_str(),Label1->Caption.Lenght(),1,file);
У AnsiString есть много методов, посмотри в хелпе.

Удачной охоты :-)
Ответ отправил: Unreal2004 (статус: 2-ой класс)
Ответ отправлен: 07.04.2007, 08:28
Оценка за ответ: 5
Комментарий оценки:
Спасибо.

Отвечает: Lomer
Здравствуйте, Win2k!
Основные функции для работы с реестром:

RegCreateKey
RegCreateKeyEx
RegOpenKey
RegOpenKeyEx
RegSetValue
RegSetValueEx
RegQueryValue
RegQueryValueEx
RegEnumValue

(Информация общая для всех пользователей должна заноситься в ключ вида:
HKEY_LOCAL_MACHINESoftwareMyCompanyMyProduct1.0
Информация специфичная для пользователя должна заноситься в ключ вида:
HKEY_CURRENT_USERSoftwareMyCompanyMyProduct1.0...)

*.ini файл - обычный текстовый файл, поэтому работайте с ним функциями:
CreateFile
ReadFile
WriteFile
Также в stdio.h есть функции
fopen
fgets
fputs

Ansistring переводится в обычную строку так: Label1->Caption.c_str();
Ответ отправил: Lomer (статус: 3-ий класс)
Ответ отправлен: 07.04.2007, 20:59
Оценка за ответ: 4
Комментарий оценки:
Cпасибо. Хотелось бы поподробней узнать, чем отличается, например, RegOpenKey и
RegOpenKeyEx и.т.д. (т.е. нужно было дать описание каждой функции).

Отвечает: Olegzp
Здравствуйте, Win2k!
http://firststeps.ru/cbuilder/r.php?13
http://firststeps.ru/cbuilder/r.php?11

AnsiString S;
S.c_ctr(); возвращает указатель на на строку
для вашего вопроса

Label1->Caption->c_str();
Или у меня на сайте есть статья http://bcb-program.narod.ru/Page2.html
Ответ отправил: Olegzp (статус: 1-ый класс)
Ответ отправлен: 09.04.2007, 13:41
Оценка за ответ: 5
Комментарий оценки:
Спасибо за помощь!


Вопрос № 81.445
Всем доброго времени суток!
Вот приспичило мне написать программу перехвата для одной проги(типа r_admin, короче управление компьютерным клубом), суть такова что мне нужно знать что за пакеты она шлет, притом в этих пакетах точно содержится текстовая информация и скриншоты экрана но в неизвестной мне последовательности и т.д.
короче мне нужно написать перехватчик, чтобы он писал логи а потом их разгребать!
и еще: как перехватить api функцию вызванную из этой программы (снятие скриншотов) просто на клиенте необходимо знать когда происходит снятие скринов
Заранее спасибо!
Отправлен: 07.04.2007, 15:06
Вопрос задал: Nooki (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Решетник Д
Здравствуйте, Nooki!
Первым делом стоило обратиться к поисковикам...
Для перехвата АПИ вызовов можно почитать статьи с rsdn.ru (
http://rsdn.ru/article/baseserv/IntercetionAPI.xml
http://rsdn.ru/article/baseserv/apicallsintercepting.xml
и т.д. и т.п.
Для начала стоит попробовать написать сниффер. Это сделать намного легче, чем звучит... опять же пользуйтесь поиском на данную тематику - там и примеры...
Получаете данные, перехваченные этим сниффером и можете сами анализировать.
Кстати, можно попробовать проанализировать поток данных путем поиска заголовка графического файла....
В общем, вариантов много.... желаю удачи в "исследовании"...
---------
Жизнь коротка, чтобы писать на ассемблере
Ответ отправил: Решетник Д (статус: Студент)
Ответ отправлен: 08.04.2007, 00:27


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.47 от 06.04.2007
Яндекс Rambler's Top100

В избранное