Возврат значения из метода в элементе управления ActiveX - PullRequest
1 голос
/ 19 ноября 2008

Я создаю элемент управления ActiveX, который будет использоваться на веб-страницах для запроса текущей установленной версии стороннего программного обеспечения на клиентском компьютере. Элемент управления должен предоставить только один метод - GetVersion - который возвращает версию в виде целого числа. Я очень неопытен с ActiveX, и у меня есть проблемы с чем-то таким простым, как правильное возвращение значений из методов. Если я использую следующую декларацию в IDL:

[id(1)] void GetVersion();

В паре со следующей реализацией:

BEGIN_DISPATCH_MAP(CDetectorCtrl, COleControl)
    DISP_FUNCTION_ID(CDetectorCtrl, "GetVersion", 1, GetVersion, VT_EMPTY, VTS_NONE)
END_DISPATCH_MAP()

void CDetectorCtrl::GetVersion()
{
    MessageBox(L"Test");
}

Я могу вызвать метод из HTML и увидеть мой MessageBox просто отлично.

Но если я изменю определение / код на:

[id(1)] int GetVersion();

и

BEGIN_DISPATCH_MAP(CDetectorCtrl, COleControl)
    DISP_FUNCTION_ID(CDetectorCtrl, "GetVersion", 1, GetVersion, VT_INT, VTS_NONE)
END_DISPATCH_MAP()

int CDetectorCtrl::GetVersion()
{
    MessageBox(L"Test");
    return 1337;
}

Я получаю сбой при вызове метода из HTML.

1 Ответ

1 голос
/ 19 ноября 2008

На вопрос и ответ ...

Проблема возникла из-за отсутствия AFX_MANAGE_STATE в самом методе:

LONG CDetectorCtrl::GetVersion(void)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    return 1337;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...