掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
AlphaBlendでMoveMemoryを使用しないとうまくいかない理由 (ID:80909)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ByVal/ByRefの問題でしょう。 今回の AlphaBlend や、WindowFromPoint APIなどのように、 構造体を値渡しする事が要求される場合は、呼び出し方に工夫が必要です。 なぜならVB6では、ユーザー定義型を「値渡し」する事はできないからです。 (ユーザー定義型の引数は、全て「参照渡し」になります) 今回のように、「構造体の値渡し」が要求される場合は、ユーザー定義型を使うのではなく、 提示された方法のように、構造体と同サイズの変数を用意しておき、そこに、 MoveMemory で複写した値をByValで渡すという方法で回避してください。 あるいは、構造体要素の値をスタックに積み上げて配置する手法もあります。 例えば、WindowFromPointXY の場合は、引数を「ByVal Point As POINTAPI」などと 定義する事ができないため、それを展開して、 Declare Function WindowFromPoint Lib "User32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long などと記述するのが常套手段となっています。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.