0

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++ コードで動作させるにはどうすればよいですか。私は本当に愚かで、比較的単純なものを見逃していると感じています。

前もって感謝します。

4

0 に答える 0