Win32 ASM のプロジェクトとして、最近開発した Java アプリの ASM バージョンを作成しようとしていますが、タイトルが示すように、GdiGradientFill に問題があります。現時点では、FASM を使用し、INVOKE や WIN32 インクルードの使用などの高レベルの ASM 構造を避けることをお勧めします。
私が持っているもの、atm:
PUSH [hWnd]
CALL [User32.GetWindowDC]
MOV [hDC], EAX
PUSH rectClient
PUSH [hWnd]
CALL [User32.GetClientRect]
PUSH [rectClient.left]
POP [colorOne.xPos]
PUSH [rectClient.top]
POP [colorOne.yPos]
MOV [colorOne.red], 0xC000
MOV [colorOne.green], 0xC000
MOV [colorOne.blue], 0xC000
MOV [colorOne.alpha], 0x0000
PUSH [rectClient.right]
POP [colorTwo.xPos]
PUSH [rectClient.bottom]
POP [colorTwo.yPos]
MOV [colorTwo.red], 0x0000
MOV [colorTwo.green], 0x2800
MOV [colorTwo.blue], 0x7700
MOV [colorTwo.alpha], 0x0C00
MOV [gRect.UpperLeft], 0
MOV [gRect.LowerRight], 1
PUSH GRADIENT_FILL_RECT_H
PUSH 1
PUSH gRect
PUSH 2
PUSH colorOne
PUSH [hDC]
CALL [GDI32.GdiGradientFill]
ただし、コードは FALSE のみを返し、両方の MSDN を通過した後 ( http://msdn.microsoft.com/en-us/library/windows/desktop/dd373585(v=vs.85).aspx )
および他のいくつかの例 (http://www.asmcommunity.net/board/index.php?topic=4100.0) を参照してください。
Msimg32 の GradientFill を使用しようとしたときに別の問題がありました。これは常にクラッシュにつながるためです。これは正確ですか、それともこのフォームで問題を経験した人はいますか?
コード全体の Pastebin リンク: http://pastebin.com/GEHDw6Qe
助けてくれてありがとう、SS
編集: コードは現在機能しています。正直なところ、何が変わったのかわかりません。PUSH / POP シーケンスを MOV EAX に変更する以外に、以前と現在の作業データの間に違いはありません。[rectClient.left]、 ect (PUSH / POP メソッドも機能します) - 支援を提供してくれた人々に感謝します!