Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: ne_viens
Дата сообщения: 23.12.2013 18:34
А что, разве в Delphi тоже runtime бывает? Что-то я только с одним ехе сталкивался пока, без dll'ов.
Автор: ItsJustMe
Дата сообщения: 23.12.2013 22:58
Exe, рожденные Delphi - как раки. Бывают по пять рублей = ну очень большие, а бывают по три рубля = маленькие. Те, что по пять рублей, им действительно ничего, кроме них самих, не надо. Зато они ну очень большие. Ну очень большие. Зато по пять рублей. А те, что по три - они не будут работать без кучи г... богомерзкого мусора в System32 с расширением bpl. (Это так великая Borland Embarcadero называет свои исключительные dll. Чтобы подчеркнуть их исключительность.) И этого мусора там до дури. Зато сами exe - маленькие.
Автор: ne_viens
Дата сообщения: 24.12.2013 01:08
Ради интереса решил поискать, где мелкие раки зимуют, так как в \system директории 16 бплов.
Нашлись двое- IDA Pro, но она не в щёт, так как все ее бплы она держит у себя, а вот имя второго рака оказалось довольно неожиданным. Это Intel Desktop Utilities, которые когда-то установил, чтобы variable.sys заполучить. И вроде у них самих довольно неплохой компилятор есть...
Из примерно 150 программ (папок в Program Files) только одна рантаймы в систему положила, так что не всё так плохо, как кажется.
Автор: akaGM
Дата сообщения: 24.12.2013 06:15
мне, вообще говоря, наплевать, пусть об этом голова болит у мышиных программистов...
все мои дельфийские проги начинаются с директивы appconsole и работают в автономе под всеми маздайками...
Автор: delover
Дата сообщения: 24.12.2013 16:41
ItsJustMe

Цитата:
Exe, рожденные Delphi - как раки. Бывают по пять рублей = ну очень большие, а бывают по три рубля = маленькие.

Скажу больше. - Сомневаюсь что вы это пробовали. В Делфи есть возможность писать свои приложения "гетерогенный" dll-bpl без использования RTL.BPL и вообще всех борлановских библиотек. Там уже не раки не крабы и даже не appconsole. А в шарпе вы свою system.GZip(Который хуже LZ).dll не навояете.
Автор: delover
Дата сообщения: 26.12.2013 17:28
Я просто это... Мне "автономно переносимые" понравилось, надо в словаре глянуть, простите.

Добавлено:
Это как, они вообще не переносятся чтоли?

Добавлено:
Если есть автономно переносимые, значит есть автономно не переносимые наверно, надо тоже гуглить.
Автор: ItsJustMe
Дата сообщения: 26.12.2013 20:52
delover

Цитата:
Если есть автономно переносимые, значит есть автономно не переносимые наверно, надо тоже гуглить.

Это еще что (хотя все это лучше подойдет для темы "не только оно"). А вы знаете, что все приложения на PC являются x64? Только одни "полноценные", а другие "неполноценные". Мне это один гуру на этом форуме открыл.


Цитата:
Сомневаюсь что вы это пробовали.

Честно, закончил свое общение с Embarcadero продуктами на RAD2009. А про bpl заметил еще со времен Delphi 7. Не знаю, сейчас может что и изменилось.

Цитата:
А в шарпе вы свою system.GZip(Который хуже LZ).dll не навояете.

Лично я уже много лет пользую это. Да, вы правы. Своего я не наваяю. Ибо зачем я буду тратить свои силы на то, что за меня уже сделано?
Автор: denis azbuka
Дата сообщения: 26.12.2013 21:09
1
Автор: delover
Дата сообщения: 27.12.2013 06:57

Цитата:
Лично я уже много лет пользую

Да я тоже за 1 час написал свою обёртку на 32 бит dll (7zip). Подсунуть то её я не могу, а зачем я автономно таскаю это, явно бесполезное детище, мне не понять.


Цитата:
А вы знаете, что все приложения на PC являются x64?

Тут мне сказали что Win95 написан на паскале, я где то в 90-х пробовал пустить этот миф, мня тогда чуть не побили.
Автор: Garrett
Дата сообщения: 27.12.2013 07:23
delover

Цитата:
Тут мне сказали что Win95 написан на паскале

Все верно, кроме Win95. Только самые первые версии Виндовс были написаны на паскале.
Автор: delover
Дата сообщения: 27.12.2013 12:35
Garrett
Забавно что это говорил учитель информатики. Мы выяснили, думаю он заблуждался:
http://forum.mydiv.net/stopic931_3.html

Цитата:
блин скока говорить,
винда до 2.95 включительно написана на паскале,
конечно с использованием асмы!!

Версию 2.95 я не нагуглил.
Автор: bomzzz
Дата сообщения: 27.12.2013 13:36
интересно. можно в самом микрософте спросить.
гугл в основном говорит NT на C/С++ и masm

Добавлено:
а на какой операционной системе писали Windows NT 4.0(3.1) ? ?
Автор: Aktaf
Дата сообщения: 29.12.2013 23:01
Я не смог компилировать очередную версию VD.
Может кто подскажет как "побороть" можно, вот ошибки и места, куда ссылается программа: [more=ДАЛЕЕ] 9>Compiling...
9>FilterInstance.cpp
9>.\source\FilterInstance.cpp(1594) : error C2660: 'IVDFilterFrameClientRequest::Start' : function does not take 3 arguments
9>.\source\FilterInstance.cpp(1608) : error C2660: 'IVDFilterFrameClientRequest::Start' : function does not take 3 arguments
9>.\source\FilterInstance.cpp(1673) : error C2660: 'IVDFilterFrameClientRequest::Start' : function does not take 3 arguments
9>.\source\FilterInstance.cpp(1981) : error C2039: 'GetSrcIndex' : is not a member of 'IVDFilterFrameClientRequest'
9> c:\VirtualDub8\VirtualDub110502_eng\src\VirtualDub\h\FilterFrameRequest.h(46) : see declaration of 'IVDFilterFrameClientRequest'
9>FilterFrameRequest.cpp
9>.\source\FilterFrameRequest.cpp(76) : error C2511: 'void VDFilterFrameClientRequest::Start(IVDFilterFrameClient *,uint64,uint32)' : overloaded member function not found in 'VDFilterFrameClientRequest'
9> c:\VirtualDub8\VirtualDub110502_eng\src\VirtualDub\h\FilterFrameRequest.h(79) : see declaration of 'VDFilterFrameClientRequest'
9>.\source\FilterFrameRequest.cpp(121) : error C2039: 'GetSrcIndex' : is not a member of 'VDFilterFrameClientRequest'
9> c:\VirtualDub8\VirtualDub110502_eng\src\VirtualDub\h\FilterFrameRequest.h(79) : see declaration of 'VDFilterFrameClientRequest'
9>.\source\FilterFrameRequest.cpp(122) : error C2065: 'mSrcIndex' : undeclared identifier
9>Generating Code...
9>Build log was saved at
"file://c:\VirtualDub8\VirtualDub110502_eng\obj\Release\VirtualDub\BuildLog.htm"
9>VirtualDub - 7 error(s), 0 warning(s)
========== Build: 8 succeeded, 1 failed, 9 up-to-date, 0 skipped ==========
FilterInstance.cpp строка 1594 (93-95):

                    srcreq->Start(NULL, 0);

-------------------------
FilterInstance.cpp строка 1608 (07-09):

                        srcreq->Start(NULL, prefetchInfo.mCookie);

---------------------
FilterInstance.cpp строка 1673 (72-74):

            srcreq->Start(NULL, prefetchInfo.mCookie);

-----------------
FilterInstance.cpp строка 1681 (80-83):

        bm.mPixmapLayout = mExternalSrcCropped.mPixmapLayout;
        bm.BindToFrameBuffer(fb, true);

----------------
FilterFrameRequest.cpp строка 121 (121-124 (на самом деле пустая):

VDFilterFrameRequest::VDFilterFrameRequest()
    : mbComplete(false)

================== [/more]
Автор: bomzzz
Дата сообщения: 01.01.2014 07:27
С Новым Годом!
Никто не подскажет - есть видео плееры которые открывают проигрываемые файлы таким образом, что их можно перемещать из папки в папку. Каким образом это делается? может не по пути, а типа металлической ссылке или типа того?
Автор: delover
Дата сообщения: 01.01.2014 17:17
С Новым Годом, Бомззз!
Автор: moneybro
Дата сообщения: 01.01.2014 20:54
Привет народ!
Всех с наступившим.

Помогите плиз решить задачку (извините если она уж совсем убогая, не очень силен в программировании, только начинаю):

Есть несколько одинаковых классов с разными именами, у которых есть одноименные методы. Отличия только в реализации методов, они считают немного по разному для разных классов, то есть в разных классах одни и те же методы вычисляют разные значения от одного и того же исходного значения. Так вот очень хочется каким-то образом обратиться к методу нужного класса. Подскажите пожалуйста как это сделать. Метод статический. Выдержка из кода:

for (int i = 1; i <= Class1.ltFlNum; i++)
{ Class1.findFlPl(i);
str += "кв." + i + " под " + Class1.getSec + " эт " + Class1.getAbFl + " " + Class1.getFlSi + " стор\r\n";
}

Чтобы для десяти классов не лепить этот цикл хотел сделать метод, но передать туда имя нужного класса не могу.

Подскажите плиз как решить эту задачу.


Автор: panda3
Дата сообщения: 02.01.2014 09:22
moneybro
Сделать базовый класс, в котором все эти методы виртуальные (пустые), реальные классы унаследовать от него с переопределением виртуальных методов. Функция пусть принимает тип базового класса по ссылке, а передавать туда ссылку на экземпляр реального класса.
Автор: moneybro
Дата сообщения: 02.01.2014 09:56
Спасибо, panda3.

Действительно надо попробовать так сделать.
Автор: BagaBaga
Дата сообщения: 02.01.2014 10:22
Тут не совсем понятно, что хотел автор. Если у него гетерогенный контейнер (т.е. хранит элементы различного типа), то тогда у него только одна дорога - использовать в том или ином виде виртуальные функции (в базовом классе). Иначе, поскольку в STL нет гетерогенных контейнеров, а значит информация о типе утрачивается при присваивании элементу контейнера, ему придётся придумывать собственный механизм определения типа элемента контейнера (в случае механизма виртуальных функций это сделает за него компилятор).

С другой стороны, если в каждом контейнера хранятся элементы только одно типа (для чего они в общем и предназначены - компромисс ради эффективности), и ему просто нужно создать "по экземпляру под каждый тип".


то ему помогут шаблоны (которые, разумеется, создадут по экземпляру под каждый используемый в программе тип).
Хотя, здесь код выглядит странновато - не видно объявления и определения Сlass1. Слова же "он статический" из такого контекста на позволяет понять, что это - использование (вызов) статического метода (и обращение потом к статическим полям), или же вызов метода экземпляра (где-то выше созданного) с именем Class1 ...


Автор: moneybro
Дата сообщения: 03.01.2014 10:00
BagaBaga, спасибо за ответ. Я только начинаю программировать, поэтому не все было понятно в сказанном Вами. Уверен это все есть в учебниках и в статьях в интернете, поэтому в комментариях наверное нет необходимости. По возможности проштудирую.

Экземпляры классов я не создаю, в моей программе пока в этом нет необходимости, потому как классы созданы для одной сущности, но с разными параметрами, к которым я обращаюсь без создания экземпляра через статические поля и методы.
Автор: BagaBaga
Дата сообщения: 04.01.2014 11:42
moneybro, по вашему последнему ответу у меня несколько пунктов:

1) Лучше почитать Страуструпа, у него есть "учебник" Programming -- Principles and Practice Using C++ , http://www.stroustrup.com/programming.html . Русский перевод тоже сойдёт. После этого можно (если нужно) будет обратиться к The C++ Programming Language (4th Edition)

2) Для ваше задачи лучше подходит наследование, с вынесением общего интерфейса в базовый класс.

3) Шаблоны вряд ли помогут, хотя их можно (но не нужно) для этого приспособить.

4) То, как вы используете классы, скорее говорит о плохом дизайне. С другой стороны, если вы только учитесь (т.е. это учебная задача), то и шишки будут полезны.
Автор: nick7inc
Дата сообщения: 08.01.2014 13:23
moneybro

Цитата:
Так вот очень хочется каким-то образом обратиться к методу нужного класса. Подскажите пожалуйста как это сделать. Метод статический.

Со статическим методом так не получится, т.к. статический метод класса - это практически отдельная функция, не имеющая (почти) никакого отношения к конкретному объекту. Для доступа к данным конкретного объекта из статической функции нужно явно передавать указатель на объект в параметрах статической функции.
Как Вам уже посоветовал panda3 и BagaBaga - лучше использовать полиморфизм и наследование.
Вот пример.

Идея такая: создаёте базовый класс с виртуальными (не статическими) функциями, можно даже чисто виртуальные функции использовать в базовом классе. Создаёте классы-потомки от этого базового класса, в каждом из которых переопределяете виртуальные функции (главное, чтобы возвращаемое значение и список аргументов были одинаковыми у всех виртуальных функций с данным именем). Потом создаёте массив указателей на базовый класс (или используйте контейнеры, но начать я бы вам советовал с обычного массива). Заполняете массив указателей адресами на ваши созданные разношёрстные (разнотипные) объекты, и используйте обычный
Код: [no]for(i=0;i<10;i++){obj[i]->my_functon(int par);}[/no]
Автор: kkuuhhaa
Дата сообщения: 10.01.2014 18:47
упс, не та тема
Автор: AZJIO
Дата сообщения: 11.01.2014 16:56
http://pastebin.com/UbPdWm1h

Компилирую этот код в DLL, пишет ошибка в строке 40 и вызов функции не работает.

Цитата:
\main.cpp|40|warning: suggest parentheses around assignment used as truth value [-Wparentheses]|
||=== Build finished: 0 errors, 1 warnings (0 minutes, 1 seconds) ===|


Если компилирую как EXE, немного переделав, то вывод работает. Вроде беру пример из предыдущего рабочего примера.
Автор: Abs62
Дата сообщения: 11.01.2014 17:21
AZJIO

Цитата:
Компилирую этот код в DLL, пишет ошибка в строке 40 и вызов функции не работает.

Это не ошибка, а предупреждение. Деликатный такой намёк на то, что в операторе if() почему-то прописано присваивание вместо сравнения.
Автор: AverardoDE
Дата сообщения: 14.01.2014 19:34
Здравствуйте. У меня тут вопрос. Вот код:

Код:
char file_content[100];
ifstream f;
f.open("file.txt");
f.read(file_content, 100);
cout<<file_content;
Автор: ne_viens
Дата сообщения: 15.01.2014 08:48
А если перед f.read() добавить memset(file_content, 0, sizeof(file_content)); ?
Или ещё лучше
f.read(file_content, f.sizeOfFile); //или что там ещё у плюсов?
file_content[f.sizeOfFile] = 0;
Автор: akaGM
Дата сообщения: 15.01.2014 11:18
по-моему, проще сразу:
char file_content[100] = {0};
Автор: nick7inc
Дата сообщения: 16.01.2014 22:47
ne_viens
akaGM
Я не пользуюсь стримами, но по аналогии с stdio разве не надо отводить 1 лишний байт для завершающего нуля? (если читаешь 100, будь любезен выделить 101 байт, поставив 0x00 в конце)
Автор: ne_viens
Дата сообщения: 17.01.2014 09:13
Это только в случае, если читаемая строка занимает 100 байтов.
В случаях, когда добавляет абракадабру, строка обычно короче.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.