Ответ 1
wsprintf
не поддерживает с плавающей запятой. Ошибка заключается в ее использовании.
Если вы хотите что-то вроде sprintf
, но для широких символов/строк вы хотите использовать swprintf
.
На самом деле, поскольку вы используете макрос TEXT
, вам, скорее всего, понадобится _stprintf
: он будет переходить от узкой к широкой реализации в синхронизации с теми же макросами препроцессора, что и TEXT
чтобы решить, будет ли строка узкой или широкой. Однако весь этот подход в значительной степени является реликтом со времен, когда Microsoft все еще продавала и поддерживала версии Windows на основе как 32-битного ядра NT, так и 16-битного ядра. В 16-разрядные версии имели только крайне минимальную поддержку широких символов, так что Microsoft упорно работала на разрешение единой исходного кода базы для компиляции использовать либо узкие символы (таргетинг 16-битные ядра) или широкие символы (целевые 32-разрядный ядра). 16-разрядные ядра пропали достаточно долго, и почти никто не имеет повода для их поддержки.
Для чего это стоит: wsprintf
почти полностью историческая реликвия. Очевидно, что w
означает Windows
. Он был включен как часть Windows назад, когда (обратно в 16-битные дни). Он был написан без поддержки плавающей запятой, потому что в то время Windows не использовала плавающей запятой внутри - это часть того, почему у нее есть подпрограммы, такие как MulDiv, даже если делать (примерно) то же самое с плавающей запятой довольно тривиальным.