Функция отправки в VC ++ ActiveX с MFC - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь сделать COM \ ActiveX в C ++ с Visual Studio. Я хочу написать функцию в ActiveX, которую можно вызывать из другой программы. Я следую этому документу: https://docs.microsoft.com/en-us/cpp/mfc/mfc-activex-controls-adding-custom-methods?view=vs-2017.

Но когда я пытаюсь вызвать свою функцию в другой программе, у меня возникает ошибка с падением ... Вот моя ошибка:

two muppets

В моем MFCActiveGUICtrl.cpp:

BEGIN_DISPATCH_MAP(CMFCActiveXGUICtrl, COleControl)
    DISP_FUNCTION_ID(CMFCActiveXGUICtrl, "test", dispidSetNeutralMode, test, VT_BOOL, VTS_I4)
END_DISPATCH_MAP()

.... 

BOOL CMFCActiveXGUICtrl::test(LONG arg1) {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CString str1;
    str1.Format(_T("arg: %ld"), arg1);
    MessageBox(str1, (LPCWSTR)L"testssss", MB_OK);
    return 0;
}

В моем MFCActiveXGUI.h:

// Substitutions
public:
    enum {
        dispidSetNeutralMode = 6L,
        dispidCustomizeBusbar = 5L,
        dispidCustomizeBreaker = 4L,
        dispidChangeEquipmentAtLoc = 3L,
        eventidDblClick = 2L,
        eventidMouseUp = 1L,
    };

protected:
    ~CMFCActiveXGUICtrl();
    BOOL test(LONG arg1);
 ....

В моем MFCActiveXGUI.idl:

[ uuid(fb5b5028-5476-42c5-974c-073318a05b99), version(1.0), control ]
library MFCActiveXGUILib
{
    importlib(STDOLE_TLB);

    [ 
        uuid(982cb36d-92c8-4e12-afdc-a37df0aa7892)
    ]
    dispinterface _DMFCActiveXGUI
    {
        properties:
        methods:
            [id(6), helpstring("method test")] BOOL test(LONG arg1);
    };
    ...

Затем в моем тестовом приложении я использую «InvokeHelper» для вызова моей «тестовой» функции в моем activeX. Мое тестовое приложение - это приложение MFC, в которое я включаю свой activeX.

В моем TestAppDlg.cpp:

BOOL CTestAppDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();
    m_bIsBreakerPir = ! m_bIsBreakerPir;
    m_ctrlInst.InvokeHelper(0x06, DISPATCH_METHOD, VT_BOOL, NULL, (BYTE*)VTS_I4, 5);

    SetIcon(m_hIcon, TRUE);         
    SetIcon(m_hIcon, FALSE);        
....

У вас есть представление о моей проблеме? Спасибо за помощь;)


EDIT:

Когда я нажимаю «Повторить» в диалоговом окне, программа останавливается здесь: enter image description here

Вот стек вызовов: enter image description here

...