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

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

Автор: AZJIO
Дата сообщения: 21.02.2013 17:13
Перезалил справку, попробовал сделать подсветку кода в примерах. Сделать не сложно, но учитывая, что всего примеров 1320 в 344 файлах, то лучше это дело автоматизировать. Сейчас можно посмотреть как пример в "Двухмерные массивы". Вообще я уже сделал экспорт примеров в файл с меткой разделителем и эту же метку вставил в файл взамен примеров, конвертировал в HTML в Notepad++, теперь осталось разложить файл в массив и взамент меток вставить ассоциированные блоки.
Автор: bomzzz
Дата сообщения: 21.02.2013 18:18
ну это положим я догадался

Цитата:
unsigned long __stdcall RtlRandom(unsigned long z)
{
return 0;
}


а как переделать

vsprintf PROTO C :VARARG

unsigned long __cdecl vsprintf
Автор: bomzzz
Дата сообщения: 21.02.2013 21:31

Цитата:
unsigned long __cdecl Myproc(void)
{
return 0;
}


вот так правильно? обратно экспортируется правильно.

Добавлено:
сделал первую библиотеку батником, сжульничал взял такую в которой только стдкол фукции. работкаит
Автор: ne_viens
Дата сообщения: 21.02.2013 22:36

Цитата:
unsigned long __cdecl Myproc(void)


Да хоть void Myproc(void), для C функций всёравно.
Автор: bomzzz
Дата сообщения: 21.02.2013 22:42
я вообще все на воид переделал

Цитата:
void __stdcall ActivateActCtx ( unsigned long a,unsigned long b)
{
    return;
}
void __stdcall AddAtomA ( unsigned long a)
{
    return;
}
void __stdcall AddAtomW ( unsigned long a)
{
    return;
}
void __stdcall AddLocalAlternateComputerNameA ( unsigned long a,unsigned long b)
{
    return;
}
void __stdcall AddLocalAlternateComputerNameW ( unsigned long a,unsigned long b)
{
    return;
}
void __stdcall AddRefActCtx ( unsigned long a)
{
    return;
}
void __stdcall AddVectoredExceptionHandler ( unsigned long a,unsigned long b)
{
    return;
}
void __stdcall AllocConsole ( )
{
    return;
}
void __stdcall AllocateUserPhysicalPages ( unsigned long a,unsigned long b,unsigned long c)
{
    return;

папку BIN собрал, к сожалению самый последний cl.exe не хатит работать, пришлось предпоследний использовать, сейчас продумываю алгоритм для батника.

Добавлено:
два раза статью про этот воид в википендрии прочитал ни фига не понял. ну какие в ж объекты...

руль это такой объект чтоб ехать направо и налево
руль поворачивает колеса и машину уводит в право и лево

кому сдались эти объекты. компьютер тупой как пробка умеет считать только до двух, токо шо быстро
Автор: akaGM
Дата сообщения: 22.02.2013 00:26
с умным человеком общается...
Автор: bomzzz
Дата сообщения: 22.02.2013 04:18
ну не понимаю я так. никак. и не считаю что бейсиком мне на всю жизнь испортили стиль программирования. контроллер, прерывание, регистр - понимаю. а изучение объектов - программ созданных другими программистами... хотя допускаю что управляя объектами можно создавать более сложные продукты. но не понимая как руль работает, можно легко машину сломать
Автор: ItsJustMe
Дата сообщения: 22.02.2013 04:32
Тут мы рискуем залезть в дебри околопрограммерского философствования и утонуть в спорах о длинах, весах и степени прожаренности... Тем не менее, рискну заметить, что создавать большое и многофункциональное приложение на высокоуровневом языке все же легче (по мне, так намного легче), чем на низкоуровневом. Доводилось мне как-то видеть листинг одного приложения на asm'е, которое на C занимало строчек 100 кода. На asm'е же кто-то не поленился 10 страниц накатать...
Автор: bomzzz
Дата сообщения: 22.02.2013 05:48
но он мог и макрофункциями пользоваться. я же любитель, реально практические задачи выпадют редко и посидеть поптимизировать код до талого мне не лень. если бы я писал программы кому то за зарплату конечно бы так не усирался. это развлечение - головоломка. а лучший софт все таки написан на асме

что до лично меня, если мне попадется программа требующая фреймворки я ее в жисть ставить не буду, и на 99% найду замену. и никакие навороченные менюшки от которых комп зависает мне даром не нужны.

Добавлено:
вот ты начал изучать асм. начинаешь делать простые примеры. эти примеры у тебя копятся, а потом ты их используешь как макрофункции своего изготовления. пишешь программу - так это я уже делал. вытаскиваешь код, даже толком уже не помнишь как он работает. этого не делал - сидишь кусочек выдумываешь как получше сделать, так что эта уйма строк с опытом накопленным пишется быстро
Автор: AZJIO
Дата сообщения: 22.02.2013 06:40
Доделал справку, надеюсь это заключительный аккорд.
ссылка1, зеркало.
Боялся испортить код в примерах, но по ходу разобрался в предполагаемых проблемах.
1. Код содержал теги HTML, мог бы удалить, но решил игнорировать такие примеры, их не много.
2. Спецсимволы в примерах, типа < формат &код; заменил перед преобразованием.
Перед экпортом блоков кода в игнор были добавлены блоки содержащие две подряд строки начинающиеся с русского текста, код не содержащий хотя бы одного символа англ. буквы или цифры, код содержащий только цифры, пробелы и ./ , код содержащий только англ. буквы и цифры (без спецсимволов).
3. Использовался плаг из Notepad++ для конвертирования в HTML формат.
4. Удалён мусор (теги обрамляющие пробелы и объединение одинаковых следующих друг за другом тегов)
5. Импорт блоков с логом для проверки ошибок, контроль что все замены выполнены.
Автор: bomzzz
Дата сообщения: 22.02.2013 08:47
неожиданно подкралось, проблема с функциями cdecl видимо те которые включены в старые имена oldnames.lib или типа того. а можно слинковать чтоб линкатор не использовал вообще эти либы левые oldnames.lib libcmt.lib и что самое смешное kernel32.lib ???


Цитата:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.00.9176 for 80x86
Copyright (C) Microsoft Corporation 1984-2001. All rights reserved.

ntoskrnl.c
ntoskrnl.c(114) : warning C4391: 'void strlen(void)' : incorrect return type for
intrinsic function, expected 'unsigned int'
ntoskrnl.c(114) : warning C4392: 'void strlen(void)' : incorrect number of argum
ents for intrinsic function, expected '1' arguments
ntoskrnl.c(114) : error C2169: 'strlen' : intrinsic function, cannot be defined
ntoskrnl.c(118) : warning C4391: 'void strcpy(void)' : incorrect return type for
intrinsic function, expected 'char'
ntoskrnl.c(118) : warning C4392: 'void strcpy(void)' : incorrect number of argum
ents for intrinsic function, expected '2' arguments
ntoskrnl.c(118) : error C2169: 'strcpy' : intrinsic function, cannot be defined
ntoskrnl.c(122) : warning C4391: 'void strcmp(void)' : incorrect return type for
intrinsic function, expected 'int'
ntoskrnl.c(122) : warning C4392: 'void strcmp(void)' : incorrect number of argum
ents for intrinsic function, expected '2' arguments
ntoskrnl.c(122) : error C2169: 'strcmp' : intrinsic function, cannot be defined
ntoskrnl.c(130) : warning C4391: 'void strcat(void)' : incorrect return type for
intrinsic function, expected 'char'
ntoskrnl.c(130) : warning C4392: 'void strcat(void)' : incorrect number of argum
ents for intrinsic function, expected '2' arguments
ntoskrnl.c(130) : error C2169: 'strcat' : intrinsic function, cannot be defined
ntoskrnl.c(150) : warning C4391: 'void memset(void)' : incorrect return type for
intrinsic function, expected 'void'
ntoskrnl.c(150) : warning C4392: 'void memset(void)' : incorrect number of argum
ents for intrinsic function, expected '3' arguments
ntoskrnl.c(150) : error C2169: 'memset' : intrinsic function, cannot be defined
ntoskrnl.c(158) : warning C4391: 'void memcpy(void)' : incorrect return type for
intrinsic function, expected 'void'
ntoskrnl.c(158) : warning C4392: 'void memcpy(void)' : incorrect number of argum
ents for intrinsic function, expected '3' arguments
ntoskrnl.c(158) : error C2169: 'memcpy' : intrinsic function, cannot be defined
ntoskrnl.c(242) : warning C4391: 'void _strset(void)' : incorrect return type fo
r intrinsic function, expected 'char'
ntoskrnl.c(242) : warning C4392: 'void _strset(void)' : incorrect number of argu
ments for intrinsic function, expected '2' arguments
ntoskrnl.c(242) : error C2169: '_strset' : intrinsic function, cannot be defined

ntoskrnl.c(346) : warning C4391: 'void _abnormal_termination(void)' : incorrect
return type for intrinsic function, expected 'int'
ntoskrnl.c(346) : error C2169: '_abnormal_termination' : intrinsic function, can
not be defined


.\bin\cl.exe /Ox /LD %~n1.c /link /libpath:.\lib /noentry /def:%~n1.def /NODEFAULTLIB:oldnames.lib /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:kernel32.lib
нет не в либах дело. на memset и масм ругался при компиляции драйвера. не хотел C :VARARG как оно экпортировалось , а хотел C :DWORD,:DWORD,:DWORD

Добавлено:
похоже придется подклеивать библиотеку, сначала делать ее масмом, а в конец приклеивать кусочек фасткол функций си компилятором.
Автор: bomzzz
Дата сообщения: 22.02.2013 13:51
ne_viens
а почему вот этого нет? хотя я понимаю что это тут необязательно

Цитата:
int LibMain (long instance, long reason, long reserved)
{
    return 1;
}

но вот загвоздка - не могу подклеить к библиотеке OBJ
Автор: karakurt2
Дата сообщения: 22.02.2013 14:25
bomzzz
это ведь точка входа в динамическую библиотеку под архитектуру Win16, не откапывайте динозавров!
Автор: ne_viens
Дата сообщения: 22.02.2013 14:51
Точка входа есть и в 32 и 64 бит тоже.
Если в ней никаких действий делать не надо, можно ее вообще не писать- линкер автоматически добавит одну по умолчанию (return 1).

Если надо:
int LibMain(HANDLE h, unsigned int reason, void* reserved)
{
    if(DLL_PROCESS_ATTACH == reason)
        DisableThreadLibraryCalls(h);
    return 1;
}

, тогда так и пишем.


Цитата:
но вот загвоздка - не могу подклеить к библиотеке OBJ


В либе символы, в объекте код- символы с кодом не объединяются.


Цитата:
...ntoskrnl.c
ntoskrnl.c(114) : warning C4391: 'void strlen(void)' : incorrect return type for
intrinsic function, expected 'unsigned int'...


Что это?!
Автор: bomzzz
Дата сообщения: 22.02.2013 16:35
это ошибко получается у меня такое при попытке создать библиотеку. а склеить вообще не получилось - библиотека нерабочая получилась

http://rghost.ru/44026813


Цитата:
...ntoskrnl.c
ntoskrnl.c(114) : warning C4391: 'void strlen(void)' : incorrect return type for
intrinsic function, expected 'unsigned int'...

это я как понял имеется ввиду, что слово strlen зарезервированно языком Си и компилить такую функцию он отказывается. я в параметрах поковырялся но как это обойти не нашел. на мсдн предлагается эту фукцию исключить.
юзер32 и кернел32 нормально получаются и работают. а с нтоскернелом постоянная фигня получается. то там то тут. правда он EXE может я это не указал когда делал, дефа то нет

Добавлено:
да точно EXE то я забыл, его надо вторым параметром батнику передавать
inc2lib.C.bat ntoskrnl.inc .exe
но все равно ошибка

Цитата:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.00.9176 for 80x86
Copyright (C) Microsoft Corporation 1984-2001. All rights reserved.

ntoskrnl.c
ntoskrnl.c(350) : warning C4391: 'void _abnormal_termination(void)' : incorrect
return type for intrinsic function, expected 'int'
ntoskrnl.c(350) : error C2169: '_abnormal_termination' : intrinsic function, can
not be defined
Microsoft (R) Incremental Linker Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.

LINK : fatal error LNK1181: cannot open input file 'ntoskrnl.obj'
Для продолжения нажмите любую клавишу . . .


Добавлено:
/noHRESULT disable as intrinsic type не помогает от абнормала только
Автор: ne_viens
Дата сообщения: 22.02.2013 17:11
Почему нельзя взять готовую C:\WinDDK\7600.16385.1\lib\wxp\i386\ntoskrnl.lib ?
Автор: bomzzz
Дата сообщения: 22.02.2013 17:20
ну я могу только предпологать зачем так делается. почему то hutch так придумал, а кроме него масмом никто не занимается. Four-F для своего KMDKits-а для создания драйверов именно так и сделал, но никто не знал как добавить фасткол функции их просто опускали. а теперь когда стало известно - другое гавно вылезло

Добавлено:
но Four-F тоже некоторые библиотеки передлывал неизвестно как, причем он мне ответил что масмом уже много лет не занимается и просто уже не помнит как что он делал

Добавлено:
может тут дело в экранировании, почему то перед абнормалом два подчерка стоит. может параметр есть чтоб экранировать

Добавлено:

Цитата:
#pragma intrinsic(_abnormal_termination)


Добавлено:
нагуглил. не отключается эта функция абнормал терминатион никакими средствами. придется на фасме пробовать тоже самое сделать или снова клеить
Автор: AZJIO
Дата сообщения: 22.02.2013 20:09
Прошлый раз я справшивал про существование интерпретатора Си, нашёл это LittleC.
Автор: ItsJustMe
Дата сообщения: 23.02.2013 00:50
bomzzz
Насколько я помню, народ занимается созданием import libraries из dll только по лицензионным соображением. Т.е. они таким образом решают юридические, а не технические проблемы.
Автор: bomzzz
Дата сообщения: 23.02.2013 05:29
ItsJustMe
угу я теперь тоже так думаю. только они делаются не из ддлок, а из либов, из дллок не вытащишь инфу о количестве параметров, надо будет в ручную их дезасемблировать

вообщем я вчера несколько драйверов скомпилировал, они запустились, работали, а при повторном запуске винда завалилась. то есть так делать можно только апи функции а все что к ядру имеет отношение так не сделаешь, наверно нужна точна инфа о функции, а может еще чего. так что я вообще это дело похерю. у меня есть все либы даже для 2000-ка
Автор: AZJIO
Дата сообщения: 23.02.2013 16:02
Перезалил справку ссылка1, зеркало.
Все ключевые слова, функции, операторы в примерах теперь являются ещё и локальными ссылками на соответствующие разделы. То есть если непонятно назначение функции, можно всегда "прыгнуть" на страницу описания, и бакспейсом вернуться обратно.
Найдено и исправлено 4 примера, испорченных преобразованием, причём 2 структурных таблицы (раздел "Двоичные деревья") используют UTF8 символ, а страница в "charset=Windows-1251" (Это не исправлял, не критично).
Автор: ItsJustMe
Дата сообщения: 23.02.2013 18:27
bomzzz

Цитата:
из дллок не вытащишь инфу о количестве параметров

Так ее в import library и нет, за исключением случаев, когда имя функции сильно mangled Но такие экземпляры import libraries мне не попадались. Так что в import libraries только точки входа, а описание функций берут из других источников. Так что мне не понятно, почему скопировать lib из SDK религия (т.е. светлейший Столлман) не позволяет, а скопировать header file позволяет.

PS: А зачем lib из lib делать?
Автор: bomzzz
Дата сообщения: 23.02.2013 18:47
да фиг его знает. во первых из них выкидывается лишнее. потом они получаются в два с половиной раза меньше. дистрибутив по размеру вообще 4 мб - сравни со студией, которой только фреймворков надо гиг. потом кое что маскируется для масма, а msvcrt вообще принципиально не фурычит с масмом - не очень понял почему а разбираться руки не дошли - ее надо переделывать, вот она отлично из дллки получается
Автор: AZJIO
Дата сообщения: 23.02.2013 20:41
Ещё раз перезалил справку по Си, ссылки теже. Проверил орфографию, исправлено 131 ошибка (не учитывая повтора однотипных). Просто неприятно было читать с ошибками. Если кому надо могу исходники выложить (6 скриптов), правда написанные на AutoIt3.
Автор: dimon0476
Дата сообщения: 24.02.2013 14:46
AZJIO, я бы исходники взял, если можно.
Автор: AZJIO
Дата сообщения: 24.02.2013 18:37
dimon0476

Цитата:
я бы исходники взял, если можно.

HelpC_sources.7z
Автор: freed
Дата сообщения: 24.02.2013 19:40
кто нибудь занимался с игрушкой под названием
Portable Object Compiler

должен переводить Objective-C код в чистый С что очень интересно для обучения но я так и не смог получить из hello.m -> hello.c если если у кого нибудь Portable Object Compiler(по ссылке выше плугин для MVС++) или опыт поставить плугин для MVC++ поделитесь.
Автор: AZJIO
Дата сообщения: 24.02.2013 20:22
dimon0476

Цитата:
3. Язык С (язык СИ именно СИ, а не СИ ПЛЮС ПЛЮС) (3 - 6 месяцев)
ключевая фраза 3 - 6 месяцев Мои попытки научится программировать приводили в полный тупик полного непонимания, мне казалось это должно быть легко, как если в HTML, которое для меня казалось интуитивным. Ввести размеры окна а не писать как в триггеры памяти в указанные адреса что-то там забивать, которое будет всего лишь камешком в строительстве сложной процедуры. Какой то набор x, y, ничего явного, не за что не зацепишся чтобы сформировать какое то понимание от которого отталкиваться.
Теперь оглядываясь назад, примерно 4 года программирую на AutoIt3, являющимся самым лёгким, и при этом я пока не считаю что достиг предела знания AutoIt3, который бы ограничивал меня в возможностях. Думаю 3-6 месяцев на Си, при условии, если вы знаете несколько языков и считаетесь в них профессионаллами, тогда не спорю.
Автор: dimon0476
Дата сообщения: 24.02.2013 20:43
AZJIO, это я выложил мнение одного человека. Я лично - в университете был предмет информатика и в этом курсе ничего не было, кроме школьного курса информатики и программирования на Паскале. На факультативах рассматривали Дельфи. Но я туда не ходил. поэтому никак не считаюсь ассом в программировании. Так, учусь. Как хобби.
Автор: AZJIO
Дата сообщения: 25.02.2013 02:20
Ещё раз обновил справку ссылка1, зеркало. Функции, ключевые слова подсвеченные по тексту теперь имеют цвет аналогичный как в коде и тоже имеют локальные ссылки. Хотел ещё кнопку копирования кода добавить к блокам кода, но много текста городить приходится в HTML-файлах, пока отказался.
Добавил 49 индексов для вкладки "Указатель", для ключевых слов, циклов, директив.
Опробовал уже скрипт, с прыжком из редактора в справку к выделенному слову в коде.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

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


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