msvcrt*

Тема в разделе "WASM.BEGINNERS", создана пользователем Rockphorr, 27 ноя 2023.

  1. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.623
    Адрес:
    Russia
    Есть довольно много библиотек

    msvcrt20.dll
    msvcrt40.dll
    ...

    НО в пакете masm32 только одна lib и только один inc на все это безобразие
    хочу для простоты временно попользоваться функцией sprintf в масме32
    подскажите как вызвать ее из конкретной dll а не "хрен пойми откуда"

    и объясните кто знает, если подключить msvcrt.inc и msvcrt.lib по дефолту из масм 32, то откуда будет вызвана sprintf ???
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.330
    Из msvcrt.dll, очевидно, не?
     
  3. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    458
    папка examples в masm32
     
  4. aa_dav

    aa_dav Active Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    462
    https://microsoft.public.vc.languag...l-c-c-run-time-libraries-architecture-history
    В общем да, если нужен только sprintf, то msvcrt.dll это то, что нужно.
     
  5. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    156
    Последнее редактирование: 29 ноя 2023
  6. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    А чем wsprintf не угодил?
     
  7. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    156
    он в double не умеет
     
  8. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    458
    флоат дабл или лонгдабл?
     
  9. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.623
    Адрес:
    Russia
    кто нибудь заморачивался перечнем функций и их функционалом от версии к версии ??? чтоб подбирать по Сеньке шапку
     
  10. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    156
    скорее всего в новых версиях что-то добавляют (очевидно), а старые оставляют для обратной совместимости, отсюда они и расплодились как (MSVCR20.DLL, MSVCR70.DLL, MSVCR71.DLL, MSVCP110.DLL, etc.).
    беру всегда msvcrt.dll из папки system32. на данный момент версия файла 7.0.1941.3636 от 15.11.23, так что видимо обновляется периодически через виндовс обновы или через студию
     
  11. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    156
    вообще с плав. запятой не поддерживает операции, насколько я помню
     
  12. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    603
    у меня работает.
    Код (ASM):
    1. const_static_strw aInfo, "X=%3.2f, Y=%3.2f, A=%3.2f FPS=%3.2f "
    2. swprintf(&screen, &aInfo, ^fPlayerX, ^fPlayerY, ^tmp, ^fDeltaTime)
    Макрос swprintf вызывает crt_swprintf. Префикс ^ преобразует float в double. Демка работает, числа выводятся в буфер в Unicode.
    --- Сообщение объединено, 28 ноя 2023 ---
    Вызывается из MSVCR100.dll. У меня что-то не заработало, но немного поковыряв файлы всё заработало. В общем функция работает, заработает ли на старых библиотеках точно не знаю.
     
    Последнее редактирование: 28 ноя 2023
  13. Win32Api

    Win32Api Member

    Публикаций:
    0
    Регистрация:
    16 окт 2022
    Сообщения:
    109
    Встреча с хорошей функцией всегда праздник только очень уж редко случаются такие праздники
    Код (Text):
    1. ;DWORD  lpOut, // Буфеp для пpиема отфоpматиpованных символов
    2. ;DWORD lpFmt, // Стpока упpавления фоpматом
    3. ; ... ); // Массив аpгументов для стpоки упpавления фоpматом
    4. ;==============================================================================
    5. ; В случае успешного завеpшения - число символов в lpOut,
    6. ; не считая 0 , в пpотивном случае - меньше, чем длина lpFmt.
    7. ;==============================================================================
    8. .386 ;
    9. .model flat,stdcall ;
    10. option casemap:none ;
    11. ;==============================================================================
    12. include c:\masm32\include\windows.inc
    13. include c:\masm32\include\kernel32.inc
    14. include c:\masm32\include\user32.inc
    15. includelib c:\masm32\lib\kernel32.lib
    16. includelib c:\masm32\lib\user32.lib
    17. ;==============================================================================
    18. .data ;
    19. ;==============================================================================
    20. lpOut db 255 dup(0) ;Здесь будет храниться результат (lpOut < 1024)!
    21. Message db "Result:",0 ;Заголовок MessageBox
    22. Unicode db 55h,0,6Eh,0,69h,0,63h,0,6Fh,0,64h,0,65h,0,0,0 ;строка в Unicode
    23. ;==============================================================================
    24. ; 1. Простейшие форматы lpFmt = %type
    25. ;==============================================================================
    26. lpFmtc db "%c",0 ;Single character
    27. lpFmtC db "%C",0 ;Single character
    28. lpFmtd db "%d",0 ;Signed decimal integer
    29. lpFmthc db "%hc",0 ;Single character
    30. lpFmthd db "%hd",0 ;Signed short integer
    31. lpFmths db "%hs",0 ;String
    32. lpFmthu db "%hu",0 ;Unsigned short integer
    33. lpFmti db "%i",0 ;Signed decimal integer
    34. lpFmtlc db "%lc",0 ;Single character
    35. lpFmtld db "%ld",0 ;Long signed integer
    36. lpFmtli db "%li",0 ;Long signed integer
    37. lpFmtls db "%ls",0 ;String
    38. lpFmtlu db "%lu",0 ;Long unsigned integer
    39. lpFmtlx db "%lx",0 ;Long unsigned hexadecimal integer
    40. lpFmtp db "%p",0 ;Win2000/XP hexadecimal pointer
    41. lpFmts db "%s",0 ;String
    42. lpFmtS db "%S",0 ;String
    43. lpFmtu db "%u",0 ;Unsigned integer
    44. lpFmtx db "%x",0 ;Unsigned hexadecimal integer
    45. ;==============================================================================
    46. ; 2. Сложные форматы lpFmt = %[-][#][0][width][.precision]type
    47. ;==============================================================================
    48. _lpFmtc db "char: %c",0
    49. _lpFmtC db "%C is char",0
    50. _lpFmtd db "4: %.4d",0
    51. _lpFmthc db "%hc : %04Xh",0
    52. _lpFmthd db "%hd is int.",0
    53. _lpFmths db "%-45hs%8d",0
    54. _lpFmthu db "-%.2hu",0
    55. _lpFmti db "(%i) = %i",0
    56. _lpFmtlc db "%lc*%lc",0
    57. _lpFmtld db "%ld kb/s",0
    58. _lpFmtli db "cool! , %li",0
    59. _lpFmtls db "len 4: %.4ls",0
    60. _lpFmtlu db "<%lu> MHz",0
    61. _lpFmtlx db "hex: %#08lx",0
    62. _lpFmtp db "pointer: %p",0
    63. _lpFmts db "string: %s ,len: %i",0
    64. _lpFmtS db "%S = %u bytes ...",0
    65. _lpFmtu db "int: %u.%u.%u.%u",0
    66. _lpFmtx1 db "hex: %04x-%04x-%04x-%04x",0
    67. _lpFmtx2 db "hex: #%.2lX%.2lX%.2lX",0
    68. _lpFmtx3 db "eax=%0.8X ebx=%0.8X ecx=%0.8X edx=%0.8X esi=%0.8X",13,10, \
    69.                 "edi=%0.8X ebp=%0.8X esp=%0.8X",0
    70. ;==============================================================================
    71. ; 3. Макрос
    72. ;==============================================================================
    73. lpFmt macro Text ;
    74.     local szText ;
    75. .data ;
    76. szText byte Text,0 ;
    77. .code ;
    78. exitm <offset szText>   ;
    79. endm ;
    80. ;==============================================================================
    81. .code
    82. start:
    83. ;==============================================================================
    84. ; 1. Примеры использования простейших форматов lpFmt
    85. ;==============================================================================
    86. invoke wsprintf,addr lpOut,addr lpFmtc ,65 ;
    87. call result ; "A"
    88. invoke wsprintf,addr lpOut,addr lpFmtC ,"a" ;
    89. call result ; "a"
    90. invoke wsprintf,addr lpOut,addr lpFmtd ,1 ;
    91. call result ; "1"
    92. invoke wsprintf,addr lpOut,addr lpFmthc,65 ;
    93. call result ; "A"
    94. invoke wsprintf,addr lpOut,addr lpFmthd,1 ;
    95. call result ; "1"
    96. invoke wsprintf,addr lpOut,addr lpFmths,addr Unicode ;
    97. call result ; "U"
    98. invoke wsprintf,addr lpOut,addr lpFmthu,1 ;
    99. call result ; "1"
    100. invoke wsprintf,addr lpOut,addr lpFmti ,1 ;
    101. call result ; "1"
    102. invoke wsprintf,addr lpOut,addr lpFmtlc,65 ;
    103. call result ; "A"
    104. invoke wsprintf,addr lpOut,addr lpFmtld,5872h ;
    105. call result ; "22642"
    106. invoke wsprintf,addr lpOut,addr lpFmtli,1 ;
    107. call result ; "1"
    108. invoke wsprintf,addr lpOut,addr lpFmtls,addr Unicode ;
    109. call result ; "Unicode"
    110. invoke wsprintf,addr lpOut,addr lpFmtlu,65 ;
    111. call result ; "65"
    112. invoke wsprintf,addr lpOut,addr lpFmtlx,01A2Bh ;
    113. call result ; "1a2b"
    114. invoke wsprintf,addr lpOut,addr lpFmtp ,65h ;
    115. call result ; "00000065"
    116. invoke wsprintf,addr lpOut,addr lpFmts ,addr Message ;
    117. call result ; "Result:"
    118. invoke wsprintf,addr lpOut,addr lpFmtS ,addr Unicode ;
    119. call result ; "Unicode"
    120. invoke wsprintf,addr lpOut,addr lpFmtu ,100 ;
    121. call result ; "100"
    122. invoke wsprintf,addr lpOut,addr lpFmtx ,01A2Bh ;
    123. call result ; "1a2b"
    124. ;==============================================================================
    125. ; 2. Примеры использования сложных форматов lpFmt
    126. ;==============================================================================
    127. invoke wsprintf,addr lpOut,addr _lpFmtc ,65
    128. call result
    129. invoke wsprintf,addr lpOut,addr _lpFmtC ,"a"
    130. call result
    131. invoke wsprintf,addr lpOut,addr _lpFmtd ,1
    132. call result
    133. invoke wsprintf,addr lpOut,addr _lpFmthc ,65,65
    134. call result
    135. invoke wsprintf,addr lpOut,addr _lpFmthd ,1
    136. call result
    137. invoke wsprintf,addr lpOut,addr _lpFmths ,addr Unicode,571
    138. call result
    139. invoke wsprintf,addr lpOut,addr _lpFmthu ,1
    140. call result
    141. invoke wsprintf,addr lpOut,addr _lpFmti ,1,1
    142. call result
    143. invoke wsprintf,addr lpOut,addr _lpFmtlc ,65,56
    144. call result
    145. invoke wsprintf,addr lpOut,addr _lpFmtld ,5872h
    146. call result
    147. invoke wsprintf,addr lpOut,addr _lpFmtli ,1
    148. call result
    149. invoke wsprintf,addr lpOut,addr _lpFmtls ,addr Unicode
    150. call result
    151. invoke wsprintf,addr lpOut,addr _lpFmtlu ,666
    152. call result
    153. invoke wsprintf,addr lpOut,addr _lpFmtlx ,01A2Bh
    154. call result
    155. invoke wsprintf,addr lpOut,addr _lpFmtp ,65h
    156. call result
    157. invoke wsprintf,addr lpOut,addr _lpFmts ,addr Message,sizeof Message-1
    158. call result
    159. invoke wsprintf,addr lpOut,addr _lpFmtS ,addr Unicode,sizeof Unicode
    160. call result
    161. invoke wsprintf,addr lpOut,addr _lpFmtu ,100
    162. call result
    163. invoke wsprintf,addr lpOut,addr _lpFmtx1 ,01A2Bh
    164. call result
    165. invoke wsprintf,addr lpOut,addr _lpFmtx2 ,01A2Bh
    166. call result
    167. invoke wsprintf,addr lpOut,addr _lpFmtx3 ,eax,ebx,ecx,edx,esi,edi,ebp,esp
    168. call result
    169. ;==============================================================================
    170. ; 3. Пример c использованием макроса
    171. ;==============================================================================
    172. invoke wsprintf,addr lpOut,lpFmt("%ld kb/s"),5872h
    173. call result
    174. invoke wsprintf,addr lpOut,lpFmt("Alert, ololo, %li"),1
    175. call result
    176. ;==============================================================================
    177. invoke ExitProcess,0
    178. ;==============================================================================
    179. ; Вывод результата
    180. ;==============================================================================
    181. result proc
    182. invoke MessageBox,0,addr lpOut,addr Message,MB_OK
    183. ret
    184. result endp
    185. ;==============================================================================
    186. end start
    --- Сообщение объединено, 29 ноя 2023 ---
    [​IMG]
     
    Последнее редактирование: 29 ноя 2023
  14. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    156
    речь шла о wsprintf - это винапишная функция, а не из библиотеки времени исполнения C
     
  15. Win32Api

    Win32Api Member

    Публикаций:
    0
    Регистрация:
    16 окт 2022
    Сообщения:
    109
    mantissa нравится это.
  16. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.623
    Адрес:
    Russia
    расскажите что означают префиксы перед именем ....
    s - вывод в строку по адресу
    c - вывод в текущее окно
    ...
    --- Сообщение объединено, 30 ноя 2023 ---
    принтф быает и винапишный ? а в чем разница ?
     
  17. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.000
    Понятия не имею. wsprintf форматирует строку, выводит ее в буфер, размещен в дефолтной-предефолтной библиотеке.
     
  18. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.241
    а вот это фсЁ нужно сугубо ради мазо-хобби иль есть некие более глобальные планы? :)
     
  19. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    156
    в том что одна хранится в библиотеке user32.dll, которая является частью Windows API, а вторая является частью библиотеки CRT, которая хранится во всех CRT реализациях (не только Microsoft Visual C (msvcrt))
     
  20. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348