Я использую 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 ++. У меня такое чувство, что я действительно тупой и упускаю что-то относительно простое.
Заранее спасибо.
Задача ещё не решена.
Других решений пока нет …