Вопрос № 67573: Есть проект на С++ .NET(2003)
Есть типизированный файл(состоящий из однотипных записей, описываемых структурой)
Каким образом организовать считывание-запись такой структуры в файл.
Пробовал реализовать через FileStream+BinaryReader/Writer...Вопрос № 67576: Добрый день, сам я новичек в С++, и сразу возникли вопросы:
int i [180] [180] [7]: - проходит
int i [180] [180] [8]: - Stack Overflow
два раза по int i [180] [180] [5]: - Stack Overflow
Есть ли возможность использовать всю или х...Вопрос № 67616: Здравствуйте, уважаемые эксперты!
Возможно, ли передать класс из dll библиотеки в программу и создать объект на основе этого класса, пишу на С++...Вопрос № 67639: Hi All~
Помогите как можно снять дамп процесса в памяти, при чём не полностью дамп, а только по определённому адресу?
т.е. при запуске программа должна искать нужный процесс, и всю инфу находящуюся по конкретному адресу (005f7160), записывала...Вопрос № 67652: Здравствуйет!
Помогите довести код в приложении до рабочего состояния, там класс "накладная" товара и поля цена кол-во надо чтобы заработал таки ввод накладной с клавиатуры и вывод....
Вопрос № 67.573
Есть проект на С++ .NET(2003)
Есть типизированный файл(состоящий из однотипных записей, описываемых структурой)
Каким образом организовать считывание-запись такой структуры в файл.
Пробовал реализовать через FileStream+BinaryReader/Writer, но вручную раскладывать прочитанные байты по записи не удобно, возможно есть другое решение.
Заранее спасибо!
Приложение:
Отправлен: 18.12.2006, 20:09
Вопрос задал: Стас М. (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Torsten
Здравствуйте, Стас М.!
Нужно преобразовать структуру в char * и затем писать. Я правда не знаю что ты используешь, я .NET ненавижу и использую только стандартный С++ поэтому и пример приведу на нем, но принцип везде одинаковый.
Приложение:
--------- #define MAGIC_NUMBER 0xdeface
Ответ отправил: Torsten (статус: 3-ий класс)
Ответ отправлен: 18.12.2006, 23:14 Оценка за ответ: 5
Вопрос № 67.576
Добрый день, сам я новичек в С++, и сразу возникли вопросы:
int i [180] [180] [7]: - проходит
int i [180] [180] [8]: - Stack Overflow
два раза по int i [180] [180] [5]: - Stack Overflow
Есть ли возможность использовать всю или хотя-бы половину моей памяти в начальных декларациях?
и второе можно ли в функции rand() получить диапазон от 0 до 256?
С глубоким уважением Александр Трет.
Отвечает: Bob Johnson
Здравствуйте, Александр Трет!
во-первых, не стоит использовать стек для выделения памяти таких объемов. всегда есть GlobalAlloc, VirtualAlloc или то же new.
ну если уж надо, то вопрос такой - чем ты компилируешь программу? если это VC, то в свойствах проекта есть параметр, задающий размер стека (Linker - System - "Stack reserve size"). Впиши туда сколько надо и вперед. Если другой компилятор, скорее всего у него есть аналогичный параметр.
Ответ отправил: Bob Johnson (статус: Академик) Россия, Калуга WWW:Программирование ---- Ответ отправлен: 18.12.2006, 20:50 Оценка за ответ: 5 Комментарий оценки: Огромное_спасибо!!!
Отвечает: Шинтяков Дмитрий Васильевич / Ratson
Здравствуйте, Александр Трет!
Когда вы пишете
int i [180] [180] [7]
, то память под переменную выделяется в стеке. Объём стека ограничен, так как он, в общем-то, не предназначен дял хранения большого объёма данных.
Изменить объём стека можно где-то в настройках компилятора.
В любом случае, это не выход. Выход - выделять память под даннsе из кучи, а не из стека (т.е. при помощи оператора new). Но придётся следить за тем, чтобы не забыть освободить выделенную память.
А ЕЩЁ ЛУЧШЕ, раз уж вы пишете на С++, а не на С, использовать стандартную библиотеку шаблонов stl. Это защитит от утечек памяти.
Например, так:
#include <vector>
using namespace std;
....
vector<vector<vector<int> > > i; //тут надо поаккуратнее с пробелами! их удалять нельзя.
i.resize(180);
for (int j=0;j<i.size();++j){
i[j].resize(180);
for (int k=0;k<i[j].size();++k){
i[j][k].resize(7);
}
}
....
не лучший код, но идея понятна, надеюсь. Забыл я, честно говоря, можно ли у vector задачать начальный объём... Давно на с++ не пишу, если честно ^_^
Ответ отправил: Шинтяков Дмитрий Васильевич / Ratson (статус: 2-ой класс)
Ответ отправлен: 19.12.2006, 01:37 Оценка за ответ: 5 Комментарий оценки: Премного благодарен! Спасибо!
Отвечает: ADSota
Здравствуйте, Александр Трет!
1. Если компилятор для DOS, то нужно сделать 2 вещи:
а) Настроить компилятор - сделать модель памяти huge (для Borland C это будет меню "Options"-"Compiler"-"Code generation"-"Model"-"Huge"). Это даст возможность использования больших массивов (без этого массивы будут иметь максимум размера 1Мб).
б) Обозначить свой массивы как большие и статические:
static int huge i[180][180][20];
Используя обе эти вещи вы спокойно можете работать с этим массивом. (Только если используете ссылки на этот массив - лучше используйте дальние - это на будущее).
--------- Открыть глаза навстречу солнцу
Ответ отправил: ADSota (статус: Профессионал) Россия, Зеленоград Тел.: 8-916-53-43-916 ICQ: 84611301 ---- Ответ отправлен: 19.12.2006, 08:29 Оценка за ответ: 5 Комментарий оценки: Премного благодарен! Спасибо!
Отвечает: Sergijj
Здравствуйте, Александр Трет!
В ответах экспертов был незаслуженно забыт rand()...:)
Восполняю пробел:
#include <stdlib.h>
unsigned int randomDigit;
void main(void) {
randomDigit = rand()% 256;// % - это взятие остатка от деления.
};
--------- Стучитесь! И Вас откопают...
Ответ отправил: Sergijj (статус: 7-ой класс)
Ответ отправлен: 20.12.2006, 11:05 Оценка за ответ: 5 Комментарий оценки: Спасибо!
Вопрос № 67.616
Здравствуйте, уважаемые эксперты!
Возможно, ли передать класс из dll библиотеки в программу и создать объект на основе этого класса, пишу на С++
Отправлен: 19.12.2006, 01:39
Вопрос задал: FreeCube (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Jadd
Здравствуйте, FreeCube!
На сайте www.rsdn.ru была статья "Использование DLL в программе на Visual C++". Идем на сайт, а там Статьи-Базовые сервисы-DLL . Статья - компиляция того, что в MSDN есть.
Успехов.
--------- Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Профессионал) Адрес: Санкт-Петербург WWW:http://www.sport-diary.ru ICQ: 28260749 ---- Ответ отправлен: 19.12.2006, 01:57
Отвечает: Sergey A. Wedensky
Здравствуйте, FreeCube!
Конечно, можно. ОБъявляете класс как __declspec(dllexport).
Для удобства обычно делают примерно так:
class MYDLL_API CExportedClass {
public:
CExportedClass(void);
};
Тогда можете использовать этот же header в приложении, использующем DLL. При компиляции библиотеки дефайните MYDLL_EXPORTS, а приложения - нет.
Подключаете при помощи библиотеки импорта (.lib).
Ответ отправил: Sergey A. Wedensky (статус: 10-ый класс)
Ответ отправлен: 19.12.2006, 11:19
Вопрос № 67.639
Hi All~
Помогите как можно снять дамп процесса в памяти, при чём не полностью дамп, а только по определённому адресу?
т.е. при запуске программа должна искать нужный процесс, и всю инфу находящуюся по конкретному адресу (005f7160), записывала бы в файл.
А можно ли дампануть удалённый процесс(на другом компьютере)?(если можно аргументируйте).
Заранеее спасибо.
Приложение:
Отправлен: 19.12.2006, 09:29
Вопрос задал: \LeKs// (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Bob Johnson
Здравствуйте, Alex Stoyn / LeKs!
локальный процесс можно - OpenProcess, ReadProcessMemory.
а про удаленный ничего сказать не могу. но если есть пароль с правами администратора на удаленный компьютер, можно на нем запустить программу, которая сделает все локально
Ответ отправил: Bob Johnson (статус: Академик) Россия, Калуга WWW:Программирование ---- Ответ отправлен: 20.12.2006, 23:02
Вопрос № 67.652
Здравствуйет!
Помогите довести код в приложении до рабочего состояния, там класс "накладная" товара и поля цена кол-во надо чтобы заработал таки ввод накладной с клавиатуры и вывод.
Приложение:
Отправлен: 19.12.2006, 10:12
Вопрос задал: W4rmonger (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Tek
Здравствуйте, W4rmonger!
Чтобы заработали <i>функции</i> ввода и вывода по стандарту с/с++ после них нужно ставить список аргументов <b>даже</b> если он пустой, то есть окрывающую и закрывающую скобку.
Вы видимо паскалист.
--------- WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: 3-ий класс)
Ответ отправлен: 19.12.2006, 10:40
Отвечает: Терсков Сергей
Здравствуйте, W4rmonger!
Приведенный тобой код нерабочий в принципе. Тут много ошибок, например:
- объявление функции внутри другой (На C++ это недопустимо)
- не закрыт класс
- вызов функции с пустым списком параметров без скобок () и т.д.
Так что проще было бы переделать все заново. Вот возьми заготовку на C++. В ней реализованы два класса - товар и накладная на товары. Для вывода и ввода используются перегруженные операторы >> и <<. Так что ввод-вывод можно подключать любой (хоть консольный, хоть файловый).
Приложение:
Ответ отправил: Терсков Сергей (статус: 4-ый класс)
Ответ отправлен: 20.12.2006, 04:04