带有MFC的VC ++ ActiveX中的调度功能

时间:2019-01-04 13:53:01

标签: c++ visual-studio-2015 mfc activex

我尝试使用Visual Studio在C ++中创建COM \ ActiveX。我想在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中调用我的“ test”函数。我的测试应用程序是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);        
....

您知道我的问题吗? 谢谢您的帮助;)


编辑:

当我在对话框中单击“重试”时,程序在此处停止: enter image description here

这是调用堆栈: enter image description here

0 个答案:

没有答案