Я пытаюсь сделать COM \ ActiveX в C ++ с Visual Studio. Я хочу написать функцию в 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. Мое тестовое приложение - это приложение 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:
Когда я нажимаю «Повторить» в диалоговом окне, программа останавливается здесь:
Вот стек вызовов: