2017-07-29 12 views
0

Je fais face erreur « C3702 atl est nécessaire pour les événements com » dans mon code source, mais rien ne me aider à résoudre celui-ci.C3702 atl est nécessaire pour les événements com

Y compris ces en-têtes dans stafx.h ou d'un fichier .h ne fonctionne pas:

#include <comdef.h> 
#include <atlbase.h> 
#include <atlcom.h> 
#include <atlwin.h> 
#include <atltypes.h> 
#include <atlctl.h> 
#include <atlhost.h> 

commentaires et un commentant cette ligne dans stdafx.h ou .h fonctionne: // using namespace ATL;

Ajout ci-dessous ligne dans le fichier stdafx.h ou .h ne fonctionne pas: #define _ATL_ATTRIBUTES 1

Ajout du support ATL dans MFC ne fonctionne pas non plus pour moi.

CoInitialize (NULL) et CoUninitialize() sont également inscrites dans la mais ne résoud pas

Commentant cette ligne changer la nature de l'erreur, mais pas de solution: // [ event_receiver (com)] Cette ligne provoque l'erreur de compilation C3731 (l'événement incompatible 'function1' et le gestionnaire 'function2', la source d'événement et le gestionnaire d'événement doivent être du même type)

.H Fichier

#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 

RPC fichier

#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; 
} 

J'utilise Microsoft Visual Studio 2017 édition communautaire.

+0

Votre exemple est dans un état pas clair par rapport à la liste des choses que vous avez (admirablement) essayé. Par exemple le paramètre _ATL_ATTRIBUTES dans ce code est a) erroné et b) différent de ce que vous avez dit avoir essayé. Je regarde le petit exemple de code fourni par Microsoft pour les événements COM et je reviens de cela pour voir pourquoi le vôtre est différent. Coupez votre propre exemple de code jusqu'à ce que vous ayez seulement le gestionnaire d'événements, et cela facilitera la comparaison. https://msdn.microsoft.com/en-us/library/hdcxwbd5.aspx –

Répondre

0

Votre façon de le résoudre est correcte. _ATL_ATTRIBUTES doit être défini.

Mais vous l'avez fait dans le changement de code avant la #innclude de « stdafx.h »

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

Tant que vous utilisez en-tête précompilé toutes les déclarations avant la #include « stdafx.h » sont ignorés. Vous devez le faire dans le fichier stdafx.h! (Même vous avez écrit que cela ne fonctionne pas, vous ne nous avez pas dit pourquoi ...)