我在我的源代码中遇到了错误“C3702 atl com事件需要”,但没有任何东西可以帮助我解决这个问题。C3702 atl com事件需要
包括这些报头中stafx.h或.h文件中不起作用:
#include <comdef.h>
#include <atlbase.h>
#include <atlcom.h>
#include <atlwin.h>
#include <atltypes.h>
#include <atlctl.h>
#include <atlhost.h>
评论和未发表评论Stdafx.h中或.h文件中这一行做的工作: //使用命名空间ATL;
Stdafx.h中或.h文件中添加以下行不起作用: 的#define _ATL_ATTRIBUTES 1
添加在MFC ATL的支持也不会为我工作。
CoInitialize的(NULL)和CoUninitialize()也被写入在主但没有解决
谈及这一行更改错误性质,但没有解决方案: // [ event_receiver(com)] 此行会导致编译器错误C3731(不兼容事件'function1'和处理程序'function2';事件源和事件处理程序必须是相同类型)
.h文件中
#define _ATL_ATTRIBUTES 1
#pragma once
#include "stdafx.h"
[event_receiver(com)]
class CMainDlg
{
public:
CMainDlg() {};
~CMainDlg() {};
public:
bool OnCallStart();
HRESULT AbtoPhone_OnInitialized(BSTR Msg);
void HookPhoneEvents(IAbtoPhone* pSource);
void UnHookPhoneEvents(IAbtoPhone* pSource);
};//CMainDlg
CPP文件
#include "stdafx.h"
#include "MainDlg.h"
bool CMainDlg::OnCallStart()
{
HRESULT hr = m_AbtoPhone.CreateInstance(__uuidof(CAbtoPhone));
if (FAILED(hr))
{
AfxMessageBox(_T("Can't load CAbtoPhone component.\nCheck is registered 'SIPVoIPSDK.dll'"));
}
HookPhoneEvents(m_AbtoPhone);
return true;
}
void CMainDlg::HookPhoneEvents(IAbtoPhone* pSource)
{
__hook(&_IAbtoPhoneEvents::OnInitialized, pSource, &CMainDlg::AbtoPhone_OnInitialized);
}
void CMainDlg::UnHookPhoneEvents(IAbtoPhone* pSource)
{
__unhook(pSource);
}
HRESULT CMainDlg::AbtoPhone_OnInitialized(BSTR Msg)
{
return S_OK;
}
我使用Microsoft Visual Studio 2017年社区版。
你的例子是在一个不清楚的状态与你已经(令人钦佩地)尝试的事情列表。例如,此代码中的_ATL_ATTRIBUTES设置是a)错误的,b)与您所说的尝试不同。我会看微软为COM Events提供的一个小例子代码,并从中找出它的原因,以了解你为什么不同。减少你自己的示例代码,直到你只有事件处理程序,这将比较容易。 https://msdn.microsoft.com/en-us/library/hdcxwbd5.aspx –