c++ - 尝试解决 MFC BEGIN_EVENT_MAP 编译时错误
问题描述
我正在将 VC++6.0 项目转换为 Visual Studio 2013。我遇到了这个错误:
error C2440: cannot convert from const AFX_EVENTMAP *(__thiscall CCmdTargetEx::* )(void) const' to 'const AFX_EVENTMAP *(__stdcall *)(void)'
这是我的代码
BEGIN_EVENT_MAP(CDispatchAccount, CCmdTargetEx) //error locate in here
//{{AFX_EVENT_MAP(CDispatchAccount)
EVENT_CUSTOM( "SetFocus", FireSetFocus, VTS_NONE )
EVENT_CUSTOM( "KillFocus", FireKillFocus, VTS_NONE )
EVENT_CUSTOM( "Tab", FireTab, VTS_NONE )
EVENT_CUSTOM( "EditFull", FireEditFull, VTS_NONE )
EVENT_CUSTOM( "EditEnter", FireEditEnter, VTS_NONE )
EVENT_CUSTOM( "ListSelChanged", FireListSelChanged, VTS_I2 )
EVENT_CUSTOM( "ChangeAccount", FireChangeAccount, VTS_NONE )
EVENT_CUSTOM( "DropDown", FireDropDown, VTS_I2 )
EVENT_CUSTOM( "MSRReceived", FireMSRReceived, VTS_BSTR VTS_BOOL VTS_PVARIANT)
EVENT_CUSTOM( "EmplEditFull", FireEmplEditFull, VTS_NONE )
//}}AFX_EVENT_MAP
END_EVENT_MAP()
这是我的标题
#ifdef __BASECLASS_DLL
#define __CMDTARGET_API __declspec(dllexport)
#elif _FORMMNGR_DLL
#define __CMDTARGET_API
#elif _DATAMNGR_DLL
#define __CMDTARGET_API
#elif _CONTROL_DLL
#define __CMDTARGET_API __declspec(dllimport)
#else
#define __CMDTARGET_API
#endif // __BASECLASS_DLL
class __CMDTARGET_API CCmdTargetEx : public CCmdTarget
{
DECLARE_DYNCREATE(CCmdTargetEx)
public:
CCmdTargetEx(); // protected constructor used by dynamic
creation
virtual ~CCmdTargetEx();
// Attributes
protected:
const IID *m_piidEvents; // IID for control events
const IID *m_piidPrimary; // IID for primary idispatch
DWORD m_dwEventSink;
CWnd *m_pContainer;
UINT m_nCtrlID;
// Operations
public:
void AFX_CDECL FireEvent(DISPID dispid, BYTE* pbParams, ...);
BOOL GetDispatchIID(IID *pIID);
virtual HRESULT GetClassID(LPCLSID pclsid);
void ConnectSinkSelf(CWnd *pContainer, UINT nCtlID=-1);
void DisconnectSinkSelf();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CCmdTargetEx)
public:
virtual void OnFinalRelease();
//}}AFX_VIRTUAL
// Implementation
protected:
BOOL OnEvent(AFX_EVENT* pEvent);
// Events
virtual const AFX_EVENTMAP *GetEventMap() const;
virtual const AFX_EVENTMAP *GetThisEventMap() const;
static const AFX_DATA AFX_EVENTMAP_ENTRY _eventEntries[];
static const AFX_DATA AFX_EVENTMAP eventMap;
const AFX_EVENTMAP_ENTRY *GetEventMapEntry(LPCTSTR pszName, DISPID *pDispid) const;
void FireEventV(DISPID dispid, BYTE *pbParams, va_list argList);
// Generated message map functions
//{{AFX_MSG(CCmdTargetEx)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
// Generated OLE dispatch map functions
//{{AFX_DISPATCH(CCmdTargetEx)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_DISPATCH
DECLARE_DISPATCH_MAP()
DECLARE_INTERFACE_MAP()
// Connection point container
virtual LPCONNECTIONPOINT GetConnectionHook(REFIID iid);
virtual BOOL GetExtraConnectionPoints(CPtrArray *pConnPoints);
// Connection point for events - from COleControl
BEGIN_CONNECTION_PART(CCmdTargetEx, EventConnPt)
virtual void OnAdvise(BOOL bAdvise);
virtual REFIID GetIID();
virtual LPUNKNOWN QuerySinkInterface(LPUNKNOWN pUnkSink);
END_CONNECTION_PART(EventConnPt)
BEGIN_INTERFACE_PART(EventSink, IDispatch)
INIT_INTERFACE_PART(COleControlSite, EventSink)
STDMETHOD(GetTypeInfoCount)(unsigned int*);
STDMETHOD(GetTypeInfo)(unsigned int, LCID, ITypeInfo**);
STDMETHOD(GetIDsOfNames)(REFIID, LPOLESTR*, unsigned int, LCID, DISPID*);
STDMETHOD(Invoke)(DISPID, REFIID, LCID, unsigned short, DISPPARAMS*,
VARIANT*, EXCEPINFO*, unsigned int*);
END_INTERFACE_PART(EventSink)
// IProvideClassInfo2
BEGIN_INTERFACE_PART(ProvideClassInfo, IProvideClassInfo2)
INIT_INTERFACE_PART(COleControl, ProvideClassInfo)
STDMETHOD(GetClassInfo)(LPTYPEINFO *ppTypeInfo);
STDMETHOD(GetGUID)(DWORD dwGuidKind, GUID *pGUID);
END_INTERFACE_PART(ProvideClassInfo)
};
而这个宣言CDispatchAccount
class CCtlAccount;
class CDispatchAccount : public CCmdTargetEx
{
DECLARE_DYNCREATE( CDispatchAccount )
DECLARE_OLETYPELIB( CDispatchAccount )
public:
CDispatchAccount(); // protected constructor used by dynamic creation
// Attributes
public:
CCtlAccount* m_pConnObj;
// Operations
public:
void SetConnObject ( CCtlAccount* pConnObj ) { m_pConnObj = pConnObj; }
HRESULT GetClassID ( LPCLSID pclsid );
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CDispatchAccount)
public:
virtual void OnFinalRelease();
//}}AFX_VIRTUAL
// Implementation
protected:
virtual ~CDispatchAccount();
// Generated message map functions
//{{AFX_MSG(CDispatchAccount)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
// Generated OLE dispatch map functions
//{{AFX_DISPATCH(CDispatchAccount)
afx_msg BOOL GetBranchCodeHide();
afx_msg void SetBranchCodeHide(BOOL nNewValue);
afx_msg short GetBorder();
afx_msg void SetBorder(short nNewValue);
afx_msg BOOL GetBranchCodeAuto();
afx_msg void SetBranchCodeAuto(BOOL nNewValue);
afx_msg BSTR GetItemCodeDefault();
afx_msg void SetItemCodeDefault(LPCTSTR lpszNewValue);
afx_msg short GetInputDevice();
afx_msg void SetInputDevice(short nNewValue);
afx_msg long GetItemCodeType();
afx_msg void SetItemCodeType(long nNewValue);
afx_msg BSTR GetAccNameCtl();
afx_msg void SetAccNameCtl(LPCTSTR lpszNewValue);
afx_msg BSTR GetAccPwdCtl();
afx_msg void SetAccPwdCtl(LPCTSTR lpszNewValue);
afx_msg BOOL GetAddTrustAccount();
afx_msg void SetAddTrustAccount(BOOL nNewValue);
afx_msg BOOL GetAutoNextFocus();
afx_msg void SetAutoNextFocus(BOOL nNewValue);
afx_msg BOOL GetUseHistory();
afx_msg void SetUseHistory(BOOL nNewValue);
afx_msg BOOL GetRequireInput();
afx_msg void SetRequireInput(BOOL nNewValue);
afx_msg long GetHeight();
afx_msg void SetHeight(long nNewValue);
afx_msg long GetWidth();
afx_msg void SetWidth(long nNewValue);
afx_msg BOOL GetEnabled();
afx_msg void SetEnabled(BOOL bNewValue);
afx_msg BSTR GetCaption();
afx_msg void SetCaption(LPCTSTR lpszNewValue);
afx_msg OLE_COLOR GetBackColor();
afx_msg void SetBackColor(OLE_COLOR nNewValue);
afx_msg OLE_COLOR GetForeColor();
afx_msg void SetForeColor(OLE_COLOR nNewValue);
afx_msg BOOL GetVisible();
afx_msg void SetVisible(BOOL bNewValue);
afx_msg BSTR GetLinkInformation();
afx_msg void SetLinkInformation(LPCTSTR lpszNewValue);
afx_msg BSTR GetHelpMessage();
afx_msg void SetHelpMessage(LPCTSTR lpszNewValue);
afx_msg short GetLeft();
afx_msg void SetLeft(short nNewValue);
afx_msg short GetTop();
afx_msg void SetTop(short nNewValue);
afx_msg short GetInitSelect();
afx_msg void SetInitSelect(short nNewValue);
afx_msg short InitAccCombo(LPCTSTR strInitValue);
afx_msg void EditFullCaption(LPCTSTR strCaption);
afx_msg void ResetContent();
afx_msg short AddRow(LPCTSTR strAccount);
afx_msg short InsertRow(LPCTSTR strAccount, short iIndex);
afx_msg void DeleteRow(short iIndex);
afx_msg short GetCurSel();
afx_msg void SetCurSel(short iIndex);
afx_msg BSTR GetFirstCode();
afx_msg BSTR GetMidCode();
afx_msg short GetTotalRow();
afx_msg void Sort(short bSortFlag);
afx_msg void SetFocus();
afx_msg BOOL UpdateFromMemory(const VARIANT FAR& DataArray);
afx_msg BSTR GetAccountByIndex( short iIndex );
afx_msg BOOL IsSupportedAgreementAccount(LPCTSTR lpszAccount, long nAgreement);
afx_msg void SetTotalTradeAccountDisplayFlag(BOOL bIsDisplay);
afx_msg void IsLoadAllAccounts(BOOL bIsLoadAllAccounts);
afx_msg long GetAccountCtrlType(void);
afx_msg void SetAccountCtrlType(long lCtrlType);
afx_msg BOOL GetReadOnly();
afx_msg void SetReadOnly(BOOL bReadOnly);
afx_msg BSTR GetProductCode();
afx_msg BSTR GetBranchCode();
afx_msg BOOL SetMSRHeaderClear();
afx_msg short GetAccIsCmsn(LPCTSTR strAccount);
//}}AFX_DISPATCH
DECLARE_DISPATCH_MAP()
DECLARE_INTERFACE_MAP()
public:
enum
{
//{{AFX_DISP_ID(CDispatchAccount)
dispidBranchCodeHide = 1L,
dispidBorder = 2L,
dispidBranchCodeAuto = 3L,
dispidItemCodeDefault = 4L,
dispidInputDevice = 5L,
dispidItemCodeType = 6L,
dispidAccNameCtl = 7L,
dispidAccPwdCtl = 8L,
dispidAddTrustAccount = 9L,
dispidAutoNextFocus = 10L,
dispidUseHistory = 11L,
dispidRequireInput = 12L,
dispidLeft = 13L,
dispidTop = 14L,
dispidHeight = 15L,
dispidWidth = 16L,
dispidEnabled = 17L,
dispidVisible = 18L,
dispidCaption = 19L,
dispidBackColor = 20L,
dispidForeColor = 21L,
dispidLinkInformation = 22L,
dispidHelpMessage = 23L,
dispidInitSelect = 24L,
dispidReadOnly = 50L,
dispidInitAccCombo = 25L,
dispidEditFullCaption = 26L,
dispidResetContent = 27L,
dispidAddRow = 28L,
dispidInsertRow = 29L,
dispidDeleteRow = 30L,
dispidGetCurSel = 31L,
dispidSetCurSel = 32L,
dispidGetFirstCode = 33L,
dispidGetMidCode = 34L,
dispidGetTotalRow = 35L,
dispidSort = 36L,
dispidSetFocus = 37L,
dispidUpdateFromMemory = 38L,
dispidGetAccountByIndex = 39L,
dispidIsSupportedAgreementAccount = 40L,
dispidSetTotalTradeAccountDisplayFlag = 41L,
dispidIsLoadAllAccounts = 42L,
dispidGetAccountCtrlType = 43L,
dispidSetAccountCtrlType = 44L,
dispidGetProductCode = 45L,
dispidGetBranchCode = 46L,
dispidSetMSRHeaderClear = 47L,
dispidGetAccIsCmsn = 48L,
eventidSetFocus = 1L,
eventidKillFocus = 2L,
eventidTab = 3L,
eventidEditFull = 4L,
eventidEditEnter = 5L,
eventidListSelChanged = 6L,
eventidChangeAccount = 7L,
eventidDropDown = 8L,
eventidMSRReceived = 9L,
eventidEmplEditFull = 10L,
//}}AFX_DISP_ID
};
// Event maps
//{{AFX_EVENT(CDispatchAccount)
void FireSetFocus()
{FireEvent(eventidSetFocus,EVENT_PARAM(VTS_NONE));}
void FireKillFocus()
{FireEvent(eventidKillFocus,EVENT_PARAM(VTS_NONE));}
void FireTab()
{FireEvent(eventidTab,EVENT_PARAM(VTS_NONE));}
void FireEditFull()
{FireEvent(eventidEditFull,EVENT_PARAM(VTS_NONE));}
void FireEditEnter()
{FireEvent(eventidEditEnter,EVENT_PARAM(VTS_NONE));}
void FireListSelChanged(short iIndex)
{FireEvent(eventidListSelChanged,EVENT_PARAM(VTS_I2), iIndex);}
void FireChangeAccount()
{FireEvent(eventidChangeAccount,EVENT_PARAM(VTS_NONE));}
void FireDropDown(short bListShow)
{FireEvent(eventidDropDown,EVENT_PARAM(VTS_I2), bListShow);}
void FireMSRReceived(LPCTSTR lpszAccount, BOOL bIsOldWooriCard, VARIANT FAR* pvarCancelFlag)
{FireEvent(eventidMSRReceived,EVENT_PARAM(VTS_BSTR VTS_BOOL VTS_PVARIANT), lpszAccount, bIsOldWooriCard, pvarCancelFlag);}
void FireEmplEditFull()
{FireEvent(eventidEmplEditFull,EVENT_PARAM(VTS_NONE));}
//}}AFX_EVENT
DECLARE_EVENT_MAP()
};
我尝试更改为静态无效,但我仍然收到此错误
我不知道是什么导致了这个错误,因为在 VC++6.0 中成功编译没有错误并且错误在 BEGIN_EVENT_MAP 行上指示。
我已经四处寻找,无法弄清楚。有没有人做过这样的事?或者我的代码有问题吗
谢谢
PS:对不起我的英语
解决方案
推荐阅读
- javascript - 我无法使用以下 JavaScript 代码制作运行列表
- java - Uiautomator 使用 adb 绑定到坐标
- java - Android:错误:程序类型已存在:com.google.common.base.AbstractIterator$State
- java - 为什么两个日期之间的差异会返回额外的一天?
- c# - 如何创建通用方法来遍历对象的字段并将其用作 Where 谓词?
- javascript - 组织对象以在需要时创建键和/或将不同的属性推送到值对数组
- twitter - 如何在 Lua 中使用 OAUTH 发送 POST 请求
- json - cURL 到 PowerShell - 哈希表
- python - 如何根据列值从数据帧中提取行到多个 CSV 文件?
- node.js - 使用 Jest 进行单元测试查询器