我尝试使用Visual Studio在C ++中创建COM \ ActiveX。我想在activeX中编写一个可以从另一个程序调用的函数。我遵循以下文档:https://docs.microsoft.com/en-us/cpp/mfc/mfc-activex-controls-adding-custom-methods?view=vs-2017。
但是当我尝试在其他程序中调用函数时,出现崩溃错误... 这是我的错误:
在我的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);
....
您知道我的问题吗? 谢谢您的帮助;)
编辑: