Связь между Python и C++ через SendMessage
Я использую Python2.7 и Visual Studio 2010 на Windows 7 Professional.
Я пытаюсь использовать SendMessage для отправки объекта copydatastruct в программу MFC C++. Программа на C++ получает сообщение нормально, однако я не могу определить правильный тип данных для атрибута dwData.
Атрибут dwData проверяется по переменным, объявленным в коде C++:
#define RUN_ASYNC 0x8001
#define RUN_SYNC 0x8002
...
#define RUN_MCS 0x8012
...
Функция OnCopyData в коде C++ имеет базовый оператор 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;
}
Так как я не отправляю его должным образом, он никогда не попадает в соответствующий регистр и заканчивается использованием по умолчанию.
Я устанавливаю copydatastruct в моем скрипте Python как:
class COPYDATASTRUCT(Structure):
_fields_ = [("dwData", c_ulong),
("cbData", c_uint),
("lpData", c_void_p)]
и объявив переменные как:
RUN_ASYNC = 8001
RUN_SYNC = 8002
...
RUN_MCS = 8012
...
Это отправляет правильное четырехзначное число в программу C++, но оно не распознается должным образом для случая переключения.
Когда я объявил переменные в скрипте Python как:
RUN_ASYNC = 0x8001
RUN_SYNC = 0x8002
...
RUN_MCS = 0x8012
...
Программа на C++ получает число типа 32786, которое, конечно, не работает с оператором switch.
Как мне нужно объявить переменные, которые я собираюсь отправить в программу C++, в атрибуте dwData, чтобы заставить их работать с кодом C++. У меня такое чувство, что я действительно тупой и упускаю что-то относительно простое.
Заранее спасибо.