2016-12-21 31 views
0

アセンブリに1つの問題があります。私は変数を作成します points db 65。開始値は65ですが、私はmasm32の10進値

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は2つの文字です: '6'と '5'。バイナリ(65)から文字列( '65')に変換する独自のプロシージャを作成できます。 –

答えて

4

関数では、Cスタイルの文字列が必要です。これは、NULで終わる文字列へのポインタです。

あなたが渡したのは実際には無効な入力ですが、私はむしろ "A $^a!bunch?* of - @(厄介^ & +ガベージ{%"あなたは、0はおそらく、アセンブラによって挿入されたパディングの、あなたのpoints定数の後に置かれたことを幸運。あなたは、ウィンドウのキャプションとしてを表示したい場合は、あなたが最初にすることを変換する必要があります

あなたはすでにWin32 APIにリンクしているので、wsprintfを呼び出すことで逃げることができます。 Cランタイムライブラリへのリンクaryと電話snprintf。また、数値を文字列に変換する独自のコードを記述することもできます。

あなたの文字列が静的であると仮定すると、さらに優れたアプローチは、単に最初の場所で文字列を使用することです:

points db "65",0 

pointsより良い名前を選択したい場合があります)。


はまた、WindowsがUnicodeベースのオペレーティングシステムであることに注意してください、そして、それは2バイトのUTF-16タイプ経由でUnicodeを実装しています。したがって、常に明示的にWindows API関数のWを埋め込んだバージョンを呼び出すか、または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

あなたは明らかに整数を文字列に動的に解析する必要があります。私はそれを行うための3つの異なる方法を提案しました。あなたが車輪を再発明したいと思う唯一の理由は、教育目的のためです。それ以外の場合は、標準関数を呼び出してそれを行います。 –

+0

ありがとう、ありがとう、 'wsprintf'は私のプログラムの構文エラーになります – Aloes