Windows 7 Professional で Python2.7 と Visual Studio 2010 を使用しています。
SendMessage を使用して copydatastruct オブジェクトを MFC C++ プログラムに送信しようとしています。C++ プログラムは問題なくメッセージを受け取りますが、dwData 属性の正しいデータ型がわかりません。
dwData 属性は、C++ コードで宣言された変数に対してチェックされています。
#define RUN_ASYNC 0x8001
#define RUN_SYNC 0x8002
...
#define RUN_MCS 0x8012
...
C++ コードの OnCopyData 関数には、基本的な switch ステートメントがあります。
...
switch(pCopyDataStruct->dwData)
{
case RUN_ASYNC:
{
// DO STUFF
}
break;
case RUN_SYNC:
{
// DO STUFF
}
break;
...
case RUN_MCS:
{
// DO STUFF
}
break;
...
default:
TRACE(_T("OnCopyData unknown function"))
break;
}
きちんと送っていないので、適切なケースにヒットすることはなく、デフォルトを使用してしまいます。
Pythonスクリプトでcopydatastructを次のように設定しています:
class COPYDATASTRUCT(Structure):
_fields_ = [("dwData", c_ulong),
("cbData", c_uint),
("lpData", c_void_p)]
変数を次のように宣言します。
RUN_ASYNC = 8001
RUN_SYNC = 8002
...
RUN_MCS = 8012
...
これにより、正しい 4 桁の数字が C++ プログラムに送信されますが、switch ケースでは正しく認識されません。
Pythonスクリプトで変数を次のように宣言したとき:
RUN_ASYNC = 0x8001
RUN_SYNC = 0x8002
...
RUN_MCS = 0x8012
...
C++ プログラムは 32786 のような数値を受け取りますが、これはもちろん switch ステートメントでは機能しません。
C++ プログラムに送信する変数を dwData 属性で宣言して、C++ コードで動作させるにはどうすればよいですか。私は本当に愚かで、比較的単純なものを見逃していると感じています。
前もって感謝します。