我正面临错误" com事件需要C3702 atl "在我的源代码中但没有任何帮助我解决这个问题。
在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(不兼容的事件&#39; function1&#39;和处理程序&#39; function2&#39 ;;事件源和事件处理程序必须是同一类型)
.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社区版。
答案 0 :(得分:0)
你解决问题的方法是正确的。必须定义_ATL_ATTRIBUTES。
但你是在改变代码之前在“stdafx.h”的#include
中做到的#define _ATL_ATTRIBUTES 1
#pragma once
#include "stdafx.h"
只要使用预编译头,就会忽略#include“stdafx.h”之前的所有语句。你必须在stdafx.h中做到这一点! (即使你写道,这不起作用,你没有告诉我们为什么......)