我在 Windows 7 Professional 上使用 Python2.7 和 Visual Studio 2010。
我正在尝试使用 SendMessage 将 copydatastruct 对象发送到 MFC C++ 程序。C++ 程序很好地接收到消息,但是,我无法确定 dwData 属性的正确数据类型。
正在根据 C++ 代码中声明的变量检查 dwData 属性:
#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
...
这会将正确的四位数字发送到 C++ 程序,但不能正确识别 switch case。
当我将python脚本中的变量声明为:
RUN_ASYNC = 0x8001
RUN_SYNC = 0x8002
...
RUN_MCS = 0x8012
...
C++ 程序接收到一个像 32786 这样的数字,当然,它不适用于 switch 语句。
我如何需要在 dwData 属性中声明要发送到 C++ 程序的变量,以使它们与 C++ 代码一起使用。我有一种感觉,我真的很愚蠢,并且错过了一些相对简单的东西。
提前致谢。