2016-12-21 7 views
0

У меня проблема с одной штукой в ​​сборке. Я создаю переменную points db 65. Начальное значение равно 65, но когда я хочу показать это значение в программе, используяДесятичное значение в masm32

invoke CreateWindowEx,0,ADDR classStatic,ADDR points, WS_CHILD or WS_VISIBLE,100,100,50,50,hWnd,0,hInstance,0 

он возвращает ASCII. В этом примере символ «A». Как исправить это, чтобы показать «65»?

+1

Вы должны преобразовать его в текст. См. Например, 'snprintf' – Jester

+0

65 - это два символа:« 6 »и« 5 ». Вы можете создать свою собственную процедуру для преобразования из двоичного кода (65) в строку ('65'). –

ответ

4

Функция CreateWindowEx ожидает строку C-стиля, которая является указателем на последовательность символов с нулевым символом.

То, что вы прошли, на самом деле является недействительным, и я довольно удивлен тем, что вы получили «A» вместо «A $^a! Bunch? * Of - @ (nasty^& + мусор {%". Вам повезло, что 0 было помещено после постоянной points, вероятно, из-за прокладки вставленных ассемблера.

Если вы хотите отобразить номер как заголовок вашего окна, то вам сначала нужно преобразовать, что номер в строку.Есть несколько способов сделать это.Простейший просто вызвать функцию, которая сделает это за вас.Поскольку вы уже связаны с Win32 API, вы можете уйти с вызовом wsprintf.Конечно, ссылка на библиотеку времени выполнения C ary и звоните snprintf. Кроме того, вы можете написать свой собственный код, который преобразует число в строку.

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

points db "65",0 

(могли бы хотеть, чтобы выбрать лучшее название, чем points).


Также отметим, что для Windows является Unicode, на основе операционной системы, и она реализует Unicode с помощью 2-х байт UTF-16 типа. Следовательно, вы всегда должны явно ссылаться на W -используемые версии функций Windows API (или определять символы UNICODE и _UNICODE), а ваши строковые символы должны быть размером WORD. Таким образом, код будет:

strCaption dw '6','5',0 
invoke CreateWindowExW,0,ADDR classStatic,ADDR strCaption, WS_CHILD or WS_VISIBLE,100,100,50,50,hWnd,0,hInstance,0 
+0

Я делаю простую игру, поэтому я думаю, что имя 'points' хорошее 65 - это только пример. Точки начинаются с 0 и будут изменены – Aloes

+0

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

+0

Хорошо, спасибо, но «wsprintf» делает в моей ошибке синтаксиса программы – Aloes

 Смежные вопросы

  • Нет связанных вопросов^_^