IRONavt
Гость
|
|
« : 07-01-2010 19:58 » |
|
Здравствуйте! Есть небольшой вопрос по сабжу.
Нужно написать простенькую программку на C, способную вывести небольшой графический файл на экран. Дело в том, что до этого я работал в Delphi, а C ковырял совсем немного и только в консоли. Помогите, пожалуйста, я не знаю с какой стороны подступиться, если есть какие-нибудь ссылки по теме - буду рад.
Одним из условий является то, что программа должна быть написана именно на чистом C, всё варианты, что я находил, были для C++
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 07-01-2010 20:02 » |
|
а почему именно чистый С ?
А вообще, SDK, Image
|
|
|
Записан
|
|
|
|
IRONavt
Гость
|
|
« Ответ #2 : 07-01-2010 20:11 » |
|
Потому что это будет часть довольно древней программы
А что подразумевается под Image?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #3 : 07-01-2010 20:12 » |
|
это класс такой
|
|
|
Записан
|
|
|
|
IRONavt
Гость
|
|
« Ответ #4 : 07-01-2010 20:15 » |
|
А без классов никак нельзя? Это C++ уже получается со всеми его ООП
|
|
|
Записан
|
|
|
|
IRONavt
Гость
|
|
« Ответ #5 : 07-01-2010 20:18 » |
|
На одном забугорном форуме посоветовали разобраться с устройством файла, используя инфу с *** Мол, раз уж (скажем *bmp) файл - это набор информации, его можно расшифровать и воспользоваться.
Насколько это имеет смысл?
|
|
« Последнее редактирование: 07-01-2010 20:20 от Алексей1153++ »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #6 : 07-01-2010 20:19 » |
|
IRONavt, посмотри в хелпе класс TImage и его свойство Canvas (класс TCanvas).
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #7 : 07-01-2010 20:21 » |
|
IRONavt, с одним форматом разобраться то можно (кстати, bmp лекго рисуется на контексте), а Image поддерживает все форматы
|
|
|
Записан
|
|
|
|
IRONavt
Гость
|
|
« Ответ #8 : 07-01-2010 20:34 » |
|
RXL, я посмотрел TImage, но TCanvas у него в Делфи, а нужен C Алексей1153++, мне хотя бы bmp, в каком направлении мне двигаться? Из консоли реально отрисовать?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #9 : 07-01-2010 20:39 » |
|
IRONavt, ты в каком разделе пишешь? Borland C++! Есть такой продукт - Borland C++ Builder или сокращенно - BCB. Таже среда, что и Delphi, но язык C++.
В какой среде и какой версии ты пишешь?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
IRONavt
Гость
|
|
« Ответ #10 : 07-01-2010 20:41 » |
|
В Borland C++ Builder 6.... Я честно прочитал правила, просто недогоняю пока. Я до этого только в Delphi писал, а в C только в консоли, поэтому тяжело пока
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #11 : 07-01-2010 20:43 » |
|
IRONavt, замечательно. Я тоже пишу в BCB6. Есть там Cancas. Примерно так:
Image1->Canvas->....
Зачем тебе консоль, если ты хочешь отображать графики? Создавай проект "обычного" приложения. И еще: не путай C++ и C.
|
|
« Последнее редактирование: 07-01-2010 20:45 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
IRONavt
Гость
|
|
« Ответ #12 : 07-01-2010 20:48 » |
|
RXL, пардон, нашел Попробую сделать с обычным приложением
|
|
|
Записан
|
|
|
|
IRONavt
Гость
|
|
« Ответ #13 : 08-01-2010 11:06 » |
|
блин, это всё работа с объектами мне нужно на чистом C, не прибегая к ООП. Неужели это нереально?
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #14 : 08-01-2010 11:23 » |
|
Реально. Если использовать WinAPI напрямую.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #15 : 08-01-2010 14:50 » |
|
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #16 : 08-01-2010 22:41 » |
|
IRONavt,
1. Чем, собственно, вызвано такое ограничение - писать на Си, а не на C++? 2. Выбор инструмента (BCB6) чем обоснован?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
IRONavt
Гость
|
|
« Ответ #17 : 09-01-2010 00:51 » |
|
Это будет элемент другой, довольно сложной системы (что-то вроде клиента для обращения к базе данных), которая вся написана на Си. Этот клиент сделан под несколько платформ, в т.ч. мобильные, но мне на данном этапе нужно написать просто под винду. Борланд выбрал только потому что до этого в основном общался с Delphi и писал в Borland Delphi 7 (консольно и визуально), стало быть интерфейс привычен. Я ставил Qt, но пока в нём не шибко разобрался. Да и использует он С++
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #18 : 09-01-2010 10:16 » |
|
IRONavt, т.е. тебе нужно связать некую программу на Си с новой, которую ты напишешь? В каком виде идет связь (оба модуля линкуются вместе, как библиотека отдельным файлом, как две раздельные программы, или еще как)?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
IRONavt
Гость
|
|
« Ответ #19 : 09-01-2010 22:02 » |
|
Скорее всего будет линковка, это не уточнялось, если честно А что, есть способ связать программу на Си с файлом на С++?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #20 : 09-01-2010 22:35 » |
|
Я так понимаю, что на Си написана какая-то библиотека и в BCB6 будет написан интерфейс работы с ней. test.h: #indef TEST_H #define TEST_H
int my_func(int arg)
#endif /* TEST_H */ test.c: #include "test.h"
int my_func(int arg) { /* .... */ return arg; } mail.cpp extern "C" { #include "test.h" }
// .....
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
IRONavt
Гость
|
|
« Ответ #21 : 09-01-2010 22:43 » |
|
extern "C"? В первый раз вижу такое, что оно означает? Скорее моя программа будет являться подпрограммой их программы. То есть они через свой клиент загружают картинку, а я должен её отобразить.
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #22 : 10-01-2010 00:05 » |
|
Это способ дать компилятору C++ понять, что перед ним (внутри фигурных скобок) объявления для кода, написанного на языке C. Для того, чтобы при вызове этих функций компилятор сгенерировал корректный код вызова функций в соответствии с соглашениями для языка C.
Я правильно понимаю, что твоя часть программы - что-то вроде плагина, от которого требуют определённый интерфейс? Если твоя часть программы будет выполнена в виде библиотеки, то, в принципе, несложно сделать интерфейс на C и реализовать логику на чём-то ещё.
|
|
|
Записан
|
|
|
|
IRONavt
Гость
|
|
« Ответ #23 : 10-01-2010 00:09 » |
|
Вад, да, типа того. Но "что-то еще" это тогда может быть и Delphi? Вообще, если так смешивать, значит нужно какие-то дополнительные файлы подключать?
Простите мое нупство, я до этого в Си дальше консоли не ходил =_=
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #24 : 10-01-2010 01:04 » |
|
Полагаю, может быть и Delphi. Врать не буду - сам так не делал, но, всяком случае, причин для ограничений не вижу. Это нужно документацию смотреть. Но по идее, дополнительной работы для того, чтобы вызвать написанную на Delphi функцию из кода на C, должно быть немного.
|
|
|
Записан
|
|
|
|
IRONavt
Гость
|
|
« Ответ #25 : 10-01-2010 10:32 » |
|
что-то гугль молчит как рыба-партизан
|
|
|
Записан
|
|
|
|
|