| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Создание кода программы |
| Автор: Bima 25.8.2006, 08:04 | ||
| Ситуация такая: Нужно в программе создать блок, который бы на поле Мемо, или какое другое выводил файл в виде массива. Во второй программе (в коде) нужно этот массив назад преобразовать в файл. Что бы понять ситуацию яснее, объясню на примере. Есть текстовый файл (программа должна обрабатывать любые файлы), я его открываю первой программой и она в поле Мемо показывает мне код типа такого:
Я этот код вставляю во вторую программу и она мне по нажатию на определенную кнопку делает точно такой же файл в указаном месте. Может, кто сталкивался с такой проблемой? |
| Автор: Gordon 25.8.2006, 08:53 |
| А если просто скопировать файл? |
| Автор: Bima 25.8.2006, 09:02 |
| На другом компьютере, где будет работать вторая программа, это файла не будет! Он должен сам создаться (один в один) |
| Автор: Artemon 25.8.2006, 12:41 |
| Используй именованные каналы или сокеты. поиск по google |
| Автор: Bima 25.8.2006, 12:59 |
| Блин, что мне теперь для этого сеть создавать? А если на компьютере сети нет. Вариант домашнего??? |
| Автор: 586 25.8.2006, 13:28 | ||
После нажатия кнопки Button1 у тебя будет массив байт pMem и его размер - cb. Чего хочешь с ним - то и делай. |
| Автор: Bima 25.8.2006, 13:36 |
| Все замечательно. Функций ввода вывода очень много, что-то подобное я сам написал, вот только при выводе на экран (Мемо) они будут отображаться совсем по другому, и если их вставить в КОД программы (хочу подчеркнуть именно в код второй программы), то при записи этого массива будет различаться с исходником. То есть в том коде, что был в предыдущем топике все нормально, но основная проблема: преобразовать массив в удобочитаемый код, который потом легко можно было преобразовать обратно в массив. |
| Автор: 586 25.8.2006, 13:42 |
hex dump? |
| Автор: Bima 25.8.2006, 13:55 | ||
то есть?
можно примерчик в студию хотя бы в общих чертах |
| Автор: 586 25.8.2006, 14:18 |
как в hex-редакторе 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ |
| Автор: Bima 25.8.2006, 14:32 | ||
| Ну что то в этом виде.... Если можно будет его перевести (я пишу про массив) из char в hex и потом обратно, то этот вариант подойдет. У кого нибудь есть идеи как это сделать? можно конечно по символу брать
Но мне кажется это будет долго, и я не знаю, как назад преобразовать в массив. к тому же, как этот дамп записывать в коде программы? |
| Автор: 586 25.8.2006, 14:36 |
| А для чего это? Не понял |
| Автор: Bima 25.8.2006, 14:43 |
| ну допустим делаю я инстолятор (на самом деле это не так, но задача похожа). Мне в одной программе (далее по тексту я буду называть ее "второй") нужно, что бы программа сама из себя создала несколько файлов. То есть в самом коде программы должны быть присутствовать данные всех файлов (не только текстовых). Для этого "первая программа" должна подготовить данные для второй программы. версии копирования и распаковки файлов не подойдут. Архиваторы тоже не подходят, по независящи от меня условиям. |
| Автор: Bima 25.8.2006, 14:56 | ||||
вот допустим есть текстовый файл, который имеет внутри все три цифры - "123" первой программой я читаю его и она у меня формирует строку в Мемо:
потом при разработке второй программы я вставляю ее (полученную строчку) в код программы. После этого, вторая программа запишет этот массив StrMain в файл, который не будет отличаться от того, который я считывал первой программой. Это все я рассказал на примере текстового файла. Но если взять исполняемый файл, там есть не печатанные символы, их Мемо не поймет. В результате, файл создастся не такой, как оригинальный. |
| Автор: 586 25.8.2006, 15:09 | ||
Ты хочешь просмотреть exe-шник в Memo. Или ещё отредактировать сохранить в файл??? Ничего не понял. |
| Автор: Bima 25.8.2006, 15:18 | ||
Я не хочу его просматривать!!! и тем более не хочу его редактировать Мне нужно создать код, что бы он создавал точно такие же файлы, который я читаю первой программой. Что у них находится внутри, мне не интересно. Файлы могут быть ЛЮБЫЕ (txt, exe, bin, cab, rar и т.д.). Мемо нужен для того, что бы вывести туда информацию, точнее сгенерированный код для будущей программы. я просто не знаю, более удобного варианта... (ну можно на крайний случай вывести в RichText). Проблема не в считывании и записывании файла, а в преобразовании в текстовый вид, а потом назад в бинарный. Вариант преобразования в шеснадцатитиричную форму меня бы устроил, только как все это сделать (желательно быстро). Скорость, нужна, что бы вторая программа не 20 минут думала, что бы переворить внутреннюю информацию и создать файл в 10 кб. |
| Автор: 586 25.8.2006, 15:22 |
Если ты его редактировать не собираешься, какой смысл тогда переводить его обратно. |
| Автор: Bima 25.8.2006, 15:25 |
| ок. как мне создать код программы, который делал бы мне файл ну скажем cmd.exe (из стандартной поставки винды) ??? |
| Автор: 586 25.8.2006, 15:29 | ||
Из чего он должен его делать? Где исходные данные? |
| Автор: Bima 25.8.2006, 15:33 |
| исходные данные: файл cmd.exe. На этом же компьютере установлен ВСВ. Задача: нужно создать программу, что бы на другом компьютере, она создала ТОЧНО ТАКОЙ-ЖЕ ФАЙЛ cmd.exe (примем, что его там нет). |
| Автор: dumb 26.8.2006, 02:18 |
| мдя... вот почему порой целесообразно писать о том, чего хочется добиться в результате. где-то тут на форуме есть около миллиона топиков о сохранении файлов в ресурсы. ключевые слова для поиска: FindResource, LoadResource |
| Автор: Bima 26.8.2006, 07:28 |
| В принципе тему можно считать закрытой, хотя вопрос не решили, как я хотел. Тема создавалась для того, чо бы скрыть файл в другом файле, а если быть точнее, то несколько файлов. При создании ресурсов, любой мало-мальский редактор ресурсов может спокойно вытянуть все эти файлы из exe-ка. Своего рода это инсталятор, который делает еще кучу функций, по защите программы. А при создании ресурсов, эту программу можно очень легко вскрыть |
| Автор: dumb 26.8.2006, 14:13 |
| ресурсы - не единственное решение, но в данном случае, пожалуй, самое оптимальное. шифруй ресурсы. |
| Автор: Bima 26.8.2006, 14:34 |
| а что, есть возможность на лету их зашифровать и расшифровать? |
| Автор: 586 26.8.2006, 18:43 | ||||
Кажется, я тебя понял. Вот код:
На форме Memo1, Button1. Скорость хорошая - ~ 1.2 мб/сек Конвертирует файл в код типа:
|
| Автор: stmamont 26.8.2006, 21:06 |
| Сообщение мое стерлось. Теперь расписывать не буду. Предыдущий пост - круто , но не понятно, можно комментарии что там проиходит? Можно еще попробвать MIME - кодирование. Можно попробовать покопать как делают исталляторы (хотя б идею) Можно воспользоваться каким нибудь инсталлятором (NSIS например). Возможно он поможет полностью тебе. (он скриптовый, и может быть ничего не придется кодить))) А вообще асм рулит) (но не понятно(() |
| Автор: 586 26.8.2006, 22:40 | ||
Да ничего сложного. Достаточно открыть справочник по асм.
------- * test cx, 11111111b - устраняет проблему со вставкой строки в Билдер (поскольку строка будет длинная (>1024 символов) то выскакивает ошибка), не придумал ничего, лучше этого. Если в регистре ecx 8 первых бит равны 1, то в строку добавляется символ "\n". |
| Автор: Bima 28.8.2006, 09:08 |
| Супер. 586 ОГРОМНОЕ СПАСИБО Это то, что нужно!!!! Великолепное решение задачи, и скорость отличная!!! |