Delphi в стиле Си

Тема в разделе "DELPHI", создана пользователем Intro, 15 май 2019.

  1. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Имеет место, только у конечных пользователей много проблем из-за отсутствующего .NET Framework'а, который им приходится ставить самим. У знакомых на проекте с шарпом обожглись. Написали лаунчер для джава-игрушки на шарпе и половина игроков отвалилась - пришлось им писать лаунчер для лаунчера, который ставит нужный фреймворк в сайлент-режиме. А потом и вовсе отказались от шарпа.
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    у конченных канеш много проблем... у нормальных разработчиков проблем нет, тк на win7 предустановлен фреймворк 2.0, на win8 и выше предустановлен фреймворк 4.0... на многих линуксах предустановлен Mono... а NetCore и Mono могут бандлить приложения таким образом, чтобы фреймворк можно было не устанавливать вовсе на венде или маке или линуксе...
     
  3. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Корень проблемы. На 2.0 желающих писать нет, а на семёрке до сих пор огромное число пользователей.
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    то огромное число пользователей, что сидит на семерке имеет и второй и четвертый фреймворки... и нет никаких проблем писать под 2.0, при желании даже linq завести под ним... это все предубеждения "конченных" программистов...
     
  5. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    То, что ты, как программист, знаешь, что такое дотнет, не значит, что знают пользователи. Это не предубеждения, а реальность - софт на дотнете (особенно на >=4.6) рискует не завестись у четверти пользователей. Если ЦА твоих продуктов - тоже программисты, то не проблема. А если ЦА - школьники? Или люди, использующие комп, чтобы смотреть котиков в вк, и представления не имеющие, что такое .NET и как его устанавливать? Да, есть шанс, что фреймворк у них уже стоит, прилетел с обновлениями или поставился автоматом при установке другого софта. А если у пользователя чистая винда? А если он отключил обновления? А если он не пользовался раньше шарповым софтом и новому фреймворку взяться было неоткуда? У школьничков на том проекте случались все возможные плохие сценарии, четверть ЦА в утиль. И из-за них теперь переписывать на легаси 2.0? О каком тогда развитии технологий может идти речь, если верхняя граница стека технологий, которыми можно пользоваться, держит нас на уровне двенадцатилетней давности? Или сказать им "вы сами себе злобные буратино, обновляйтесь"? Они ответят, что не умеют, уже проходили (аналогично - с WinXP). Работать должно у всех и сразу, иначе репутационные потери, когда они начнут срать в комментах, что ничего не работает ПАМАГИТИ!11 А потом начинаешь разбираться, а у них три антивируса, сто программ в автозагрузке и всё крутится на полудохлом пентиуме, а сами они не отличат браузер от брандмауэра. А ты говоришь, фреймворки у них стоят.
     
    Pavia и Aiks нравится это.
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    https://blogs.msdn.microsoft.com/as...mework-is-included-in-what-version-of-the-os/

    нет никаких проблем писать на 2.0, более того 3.0 и 3.5 - это 2.0 рантайм и дополнительные библиотеки, которые ты можешь приложить к своему проекту на фреймворке 2.0 и это будет работать... бинари под 2.0 прекрасно работают под фреймворком 4.0 (который страшно подумать вышел больше 10 лет назад)... Mono и NetCore можно собрать независимые от фреймворка бандлы, которые запустятся везде... проблем с софтом в дотнете нет, они у тебя в голове...
     
  7. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    HoShiMin, о каком софте идет речь? Ну что за конь сферический ?
    Обычно у софта есть список требований. Грамотный софт сам при установке, проверяет ОС, проверяет пакеты, доустанавливает все сам . Что не подходит под требования - лесом. Тем более, что при приобретении - пользователь должен читать требования, ну либо он сам себе злобный буратино.
    Почему то никто не пытается Clang 7 поставить на Ubuntu 3 версии. А вот в винде почему то вдруг нужен дотнет 4.6 на вин XP. Не находите ли тут несостыковочки?
     
  8. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.455
    Адрес:
    Россия, Нижний Новгород
    Лаунчер для игрушки. Стэндалон-эксешник, который скачивает джаву с игровым клиентом, проверяет файлы и запускает. С авторизацией и базовыми функциями личного кабинета (поставить\посмотреть скин, посмотреть баланс на игровом счёте, посмотреть новости и т.д.).
    --- Сообщение объединено, 3 июн 2019 ---
    Они это и делали - доустанавливали игрокам нужный фреймворк
    Поддержка WPF в NetCore появилась хорошо, если месяц назад
     
  9. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    и что? там и без WPF были графические фреймворки... кроссплатформенные к тому же...

    так чего ты разнылся то тогда? делали и делали... как бы никто не запрещает setup'у доставить .NET фреймворк...
     
  10. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    Rel, кстати, все же, насколько реально на шарпе создать приложение, которое будет работать на всей линейке NT без скачивания всех этих дотнетов? Т.е. к примеру если я создаю софт на каком-то нибудь Масме или Си (не в студии, а в норм. компиляторе), то оно работает и на ХР, и на 10.
     
  11. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    реально, но софт само собой будет толстый... юнити (игровой движок) же работает через эмбеддинг моно, формально тоже самое ты можешь делать через mkbundle... NetCore поддерживает такую фичу из коробки, но на венде я его не пробывал...
    --- Сообщение объединено, 4 июн 2019 ---
    говоря об xp, нужно иметь ввиду, что ты говоришь о давно забытой всеми нормальными людьми системе, которой уже сколько? 18 лет? в любой адекватной конторе поддержка xp не требуется в принципе...
     
  12. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    по-хорошему, весь легаси софт х86/32 должен быть выкинут, а процы должны быть сугубо х64, что лишь бы удешевило их + улучшились бы у них показатели. Но в реале имеем нарастающий дефицит ужо прогеров, такЪ что даже дос ещё используется, а уж хрюн, видимо, доживёт до конца самого ой-ти :)
    upload_2019-6-7_4-57-0.png
    https://www.windowslatest.com/2018/06/03/new-stats-show-windows-xps-market-share-increased/
    линь же до сих пор для конечных юзерей акь полноценный десктоп не катит и, кстати, не видно особых усилий со стороны корпи для изменения этой ситуации. Впрочем, и ожидать не стоит == будут впаривать облачные десктопы.
     
  13. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    у меня мать в свои 65 лет нормально пользуется линуксом...

    https://clearlinux.org/ - как бы Интел, чем не корпи тебе?
     
  14. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    солидворкс, промт, резолв 16.. там стоят?
    так линь сейчас во многом и пишут корпи.. другой Вопрос, что он им в основном нужОоНЪ для облачных/сервачных решений.
     
  15. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    с какой стати они должны там стоять? давинчи ресолв 16 кстати заводится нативно под линуксом...

    ClearLinux как бы десктопный...
     
  16. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    если мы говорим о про-десктопе, то вопрос о возможности работы таких прог становится главным. а для сёрфинга инета и хромого бука хватит иль ваще смарт-тв.
    у него есть десктопная версия, но..
    upload_2019-6-7_17-4-15.png
    upload_2019-6-7_17-6-21.png
    основная его нагрузка для дэв задач. разработка облачков попросту выгодней подъёма на крыло офлайн десктопов.
    --- Сообщение объединено, 7 июн 2019 ---
    линь для них сбоку-припёку, а основные платформы шмяк и вынь.
     
  17. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    601
    Пока предварительная версия, думаю разбить по стандартным именам файлов. Но пока так.
    msvcrt.pas
    Код (Pascal):
    1. {Библиотека внешних функций msvcrt.dll
    2. (с) Intro   wasm.in
    3. }
    4. unit msvcrt;
    5. interface
    6.  
    7. type  pFILE   = ^_iobuf;
    8. _iobuf = record
    9.    _ptr: PChar;
    10.    _cnt: integer;
    11.    _base: PChar;
    12.    _flag: integer;
    13.    _file: integer;
    14.    _charbuf: integer;
    15.    _bufsiz: integer;
    16.    _tmpfname: PChar;
    17. end;
    18. va_list = PChar;
    19. {$EXTERNALSYM va_list}
    20. Pint64   = ^int64;
    21. size_t   = cardinal;
    22.  
    23. {stdio.h}
    24. function printf(Format: PChar): integer; cdecl; varargs;
    25. {$EXTERNALSYM printf}
    26. function sprintf(CharBuf: PChar; const Format: PChar): integer; cdecl; varargs;
    27. {$EXTERNALSYM sprintf}
    28. function fprintf(_File: pFILE; const Format: PChar): integer; cdecl; varargs;
    29. {$EXTERNALSYM fprintf}
    30. function vfprintf(_File: pFILE; const Format: PChar; arglist: va_list): integer; cdecl;
    31. {$EXTERNALSYM vfprintf}
    32. function vprintf(CharBuf: PChar; const Format: PChar; arglist: va_list): integer; cdecl;
    33. {$EXTERNALSYM vprintf}
    34. function vsprintf(_File: pFILE; const Format: PChar; arglist: va_list): integer; cdecl;
    35. {$EXTERNALSYM vsprintf}
    36. function fscanf(_File: pFILE; const Format: PChar): integer; cdecl; varargs;
    37. {$EXTERNALSYM fscanf}
    38. function scanf(Format: PChar): integer; cdecl; varargs;
    39. {$EXTERNALSYM scanf}
    40. function sscanf(const _Src: PChar; const Format: PChar): integer; cdecl; varargs;
    41. {$EXTERNALSYM sscanf}
    42. function fopen(const _Filename: PChar; const _Mode: PChar): pFILE; cdecl;
    43. {$EXTERNALSYM fopen}
    44. function fclose(_File: pFILE): integer; cdecl;
    45. {$EXTERNALSYM fclose}
    46. procedure clearerr(_File: pFILE); cdecl;
    47. {$EXTERNALSYM clearerr}
    48. function feof(_File: pFILE): integer; cdecl;
    49. {$EXTERNALSYM feof}
    50. function ferror(_File: pFILE): integer; cdecl;
    51. {$EXTERNALSYM ferror}
    52. function fflush(_File: pFILE): integer; cdecl;
    53. {$EXTERNALSYM fflush}
    54. function fgetc(_File: pFILE): integer; cdecl;
    55. {$EXTERNALSYM fgetc}
    56. function fgetpos(_File: pFILE; _Pos: Pint64): integer; cdecl;
    57. {$EXTERNALSYM fgetpos}
    58. function fgets(_Buf: PChar; _MaxCount: integer; _File: pFILE): integer; cdecl;
    59. {$EXTERNALSYM fgets}
    60. function fputc(_Ch: integer; _File: pFILE): integer; cdecl;
    61. {$EXTERNALSYM fputc}
    62. function fputs(_Str: PChar; _File: pFILE): integer; cdecl;
    63. {$EXTERNALSYM fputs}
    64. function fsetpos(_File: pFILE; _Pos: Pint64): integer; cdecl;
    65. {$EXTERNALSYM fsetpos}
    66. function fseek(_File: pFILE; _Offset: longint;_Origin: integer): integer; cdecl;
    67. {$EXTERNALSYM fseek}
    68. function fread(_DstBuf: Pointer; _ElementSize, _Count: size_t; _File: pFILE): size_t; cdecl;
    69. {$EXTERNALSYM fread}
    70. function fwrite(const _Str: Pointer; _Size, _Count: size_t; _File: pFILE): size_t; cdecl;
    71. {$EXTERNALSYM fwrite}
    72. function ftell(_File: pFILE): longint; cdecl;
    73. {$EXTERNALSYM ftell}
    74. function getc(_File: pFILE): integer; cdecl;
    75. {$EXTERNALSYM getc}
    76. function getchar(): integer; cdecl;
    77. {$EXTERNALSYM getchar}
    78. function gets(_Buffer: PChar): PChar; cdecl;
    79. {$EXTERNALSYM gets}
    80. procedure perror(const _ErrMsg: PChar); cdecl;
    81. {$EXTERNALSYM perror}
    82. function putc(_Ch: integer; _File: pFILE): integer; cdecl;
    83. {$EXTERNALSYM putc}
    84. function putchar(_Ch: integer): integer; cdecl;
    85. {$EXTERNALSYM putchar}
    86. function puts(const _Str: PChar): integer; cdecl;
    87. {$EXTERNALSYM puts}
    88. function remove(const _Filename: PChar): integer; cdecl;
    89. {$EXTERNALSYM remove}
    90. function rename(const _OldFilename, _NewFilename: PChar): integer; cdecl;
    91. {$EXTERNALSYM rename}
    92. procedure rewind(_File: pFILE); cdecl;
    93. {$EXTERNALSYM rewind}
    94. procedure setbuf(_File: pFILE; _Buffer: PChar); cdecl;
    95. {$EXTERNALSYM setbuf}
    96. function setvbuf(_File: pFILE; _Buf: PChar; _Mode: integer; _Size: size_t): integer; cdecl;
    97. {$EXTERNALSYM setvbuf}
    98. function tmpfile(): pFILE; cdecl;
    99. {$EXTERNALSYM tmpfile}
    100. function tmpnam(_Buffer: PChar): PChar; cdecl;
    101. {$EXTERNALSYM tmpnam}
    102. function ungetc(_Ch: integer; _File: pFILE): integer; cdecl;
    103. {$EXTERNALSYM ungetc}
    104. function fwscanf(_File: pFILE; const Format: PWideChar): integer; cdecl; varargs;
    105. {$EXTERNALSYM fwscanf}
    106.  
    107. {stblib.h}
    108. function atoi(_Str: PChar): integer; cdecl;
    109. {$EXTERNALSYM atoi}
    110. function atof(_Str: PChar): double; cdecl;
    111. {$EXTERNALSYM atof}
    112. function atol(_Str: PChar): longint; cdecl;
    113. {$EXTERNALSYM atol}
    114. function strtod(const _Str: PChar; _EndPtr: PPChar): double; cdecl;
    115. {$EXTERNALSYM strtod}
    116. function strtol(const _Str: PChar; _EndPtr: PPChar; _Radix: integer): longint; cdecl;
    117. {$EXTERNALSYM strtol}
    118. function strtoul(const _Str: PChar; _EndPtr: PPChar; _Radix: integer): cardinal; cdecl;
    119. {$EXTERNALSYM strtoul}
    120. function rand(): integer; cdecl;
    121. {$EXTERNALSYM rand}
    122. procedure srand(_Seed: cardinal); cdecl;
    123. {$EXTERNALSYM srand}
    124. function malloc(_Size: size_t): Pointer; cdecl;
    125. {$EXTERNALSYM malloc}
    126. function calloc(_NumOfElements, _SizeOfElements: size_t): Pointer; cdecl;
    127. {$EXTERNALSYM calloc}
    128. function realloc(_Memory: Pointer; _NewSize: size_t): Pointer; cdecl;
    129. {$EXTERNALSYM realloc}
    130. procedure free(_Memory: Pointer); cdecl;
    131. {$EXTERNALSYM free}
    132. procedure abort(); cdecl;
    133. {$EXTERNALSYM abort}
    134. type   atexitFuncCall = procedure(); cdecl;
    135. function atexit(_func: atexitFuncCall): integer; cdecl;
    136. {$EXTERNALSYM atexit}
    137. function getenv(const _VarName: PChar): PChar; cdecl;
    138. {$EXTERNALSYM getenv}
    139. function system(const _Command: PChar): integer; cdecl;
    140. {$EXTERNALSYM system}
    141. type   PrtSortFuncCompare = function(a, b: Pointer):integer; cdecl;
    142. function bsearch(const Key, Base: Pointer; NumOfElements, SizeOfElements: size_t; pFunc: PrtSortFuncCompare):integer; cdecl;
    143. {$EXTERNALSYM bsearch}
    144. procedure qsort(const Base: Pointer; NumOfElements, SizeOfElements: size_t; pFunc: PrtSortFuncCompare); cdecl;
    145. {$EXTERNALSYM qsort}
    146.  
    147. implementation
    148. {stdio.h}
    149. function printf; external 'msvcrt.dll';
    150. function sprintf; external 'msvcrt.dll';
    151. function fprintf; external 'msvcrt.dll';
    152. function vfprintf; external 'msvcrt.dll';
    153. function vprintf; external 'msvcrt.dll';
    154. function vsprintf; external 'msvcrt.dll';
    155. function fscanf; external 'msvcrt.dll';
    156. function scanf; external 'msvcrt.dll';
    157. function sscanf; external 'msvcrt.dll';
    158. function fopen; external 'msvcrt.dll';
    159. function fclose; external 'msvcrt.dll';
    160. procedure clearerr; external 'msvcrt.dll';
    161. function feof; external 'msvcrt.dll';
    162. function ferror; external 'msvcrt.dll';
    163. function fflush; external 'msvcrt.dll';
    164. function fgetc; external 'msvcrt.dll';
    165. function fgetpos; external 'msvcrt.dll';
    166. function fgets; external 'msvcrt.dll';
    167. function fputc; external 'msvcrt.dll';
    168. function fputs; external 'msvcrt.dll';
    169. function fsetpos; external 'msvcrt.dll';
    170. function fseek; external 'msvcrt.dll';
    171. function fread; external 'msvcrt.dll';
    172. function fwrite; external 'msvcrt.dll';
    173. function ftell; external 'msvcrt.dll';
    174. function getc; external 'msvcrt.dll';
    175. function getchar; external 'msvcrt.dll';
    176. function gets; external 'msvcrt.dll';
    177. procedure perror; external 'msvcrt.dll';
    178. function putc; external 'msvcrt.dll';
    179. function putchar; external 'msvcrt.dll';
    180. function puts; external 'msvcrt.dll';
    181. function remove; external 'msvcrt.dll';
    182. function rename; external 'msvcrt.dll';
    183. procedure rewind; external 'msvcrt.dll';
    184. procedure setbuf; external 'msvcrt.dll';
    185. function setvbuf; external 'msvcrt.dll';
    186. function tmpfile; external 'msvcrt.dll';
    187. function tmpnam; external 'msvcrt.dll';
    188. function ungetc; external 'msvcrt.dll';
    189. function fwscanf; external 'msvcrt.dll';
    190.  
    191. {stblib.h}
    192. function atoi; external 'msvcrt.dll';
    193. function atof; external 'msvcrt.dll';
    194. function atol; external 'msvcrt.dll';
    195. function strtod; external 'msvcrt.dll';
    196. function strtol; external 'msvcrt.dll';
    197. function strtoul; external 'msvcrt.dll';
    198. function rand; external 'msvcrt.dll';
    199. procedure srand; external 'msvcrt.dll';
    200. function malloc; external 'msvcrt.dll';
    201. function calloc; external 'msvcrt.dll';
    202. function realloc; external 'msvcrt.dll';
    203. procedure free; external 'msvcrt.dll';
    204. procedure abort; external 'msvcrt.dll';
    205. function atexit; external 'msvcrt.dll';
    206. function getenv; external 'msvcrt.dll';
    207. function system; external 'msvcrt.dll';
    208. function bsearch; external 'msvcrt.dll';
    209. procedure qsort; external 'msvcrt.dll';
    210.  
    211. end.
    На работоспособность не проверял.
     
  18. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Intro,

    Два экспорта, но определение у них разное почему то. Не удивительно, это ведь паскаля/дельфи кривые конструкции, от одного упоминания коробит :bad:. Этот язык давно нужно было выпилить.
     
  19. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    В паскале отличаются функция и процедура. Вроде как функция возвращает значение, а процедура - нет.
     
  20. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    именно так... во времена разработки Паскаля/Модулы/Оберона/Ады это считалось хорошей практикой, типа когда кодец удобнее читать, чем писать...