Связь между 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++. У меня такое чувство, что я действительно тупой и упускаю что-то относительно простое.

Заранее спасибо.

0 ответов

Другие вопросы по тегам