2017-07-29 83 views
0

我在我的源代码中遇到了错误“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年社区版。

+0

你的例子是在一个不清楚的状态与你已经(令人钦佩地)尝试的事情列表。例如,此代码中的_ATL_ATTRIBUTES设置是a)错误的,b)与您所说的尝试不同。我会看微软为COM Events提供的一个小例子代码,并从中找出它的原因,以了解你为什么不同。减少你自己的示例代码,直到你只有事件处理程序,这将比较容易。 https://msdn.microsoft.com/en-us/library/hdcxwbd5.aspx –

回答

0

您的解决方法是正确的。 _ATL_ATTRIBUTES必须被定义。

但是你做到了在“stdafx.h中”

#define _ATL_ATTRIBUTES 1 
#pragma once 
#include "stdafx.h"  

的#innclude之前更改代码只要您使用预编译的头中的#include“stdafx.h中”之前的所有语句将被忽略。你必须在stdafx.h中做到这一点! (即使你写道,这不起作用,你不告诉我们为什么......)