小编Rob*_*Rob的帖子

VS COM项目编译为32位,但在尝试编译64位时抛出错误C2259

您好我正在运行Visual Studio 2010并且在32位计算机上具有完全在32位上运行的上下文菜单shell扩展,因此存在所有方法.这是一个ATL项目.32位没有错误甚至警告.

这是问题所在.当我进入visual studio下的配置管理器并将活动解决方案平台从Win32切换到x64并尝试编译时我得到错误"错误C2259:'ATL :: CCOMObject:无法实例化抽象类".

由于这个完全相同的项目在32位编译和运行,为什么它会让我误解为x64?

任何想法或正确方向的一点将不胜感激.
主要方法是必需的并且实施如下:

STDMETHODIMP Initialize(LPCITEMIDLIST, LPDATAOBJECT, HKEY);
STDMETHODIMP GetCommandString(UINT, UINT, UINT*, LPSTR, UINT);
STDMETHODIMP InvokeCommand(LPCMINVOKECOMMANDINFO);
STDMETHODIMP QueryContextMenu(HMENU, UINT, UINT, UINT, UINT);
Run Code Online (Sandbox Code Playgroud)

保存代码空间创建Atl项目.一旦创建了初始项,添加一个新类"TestingContextMenu"其余的代码将引用它.

stdafk.h

#include "resource.h"
#include <atlbase.h>
#include <atlcom.h>
#include <atlctl.h>
#include <shlobj.h>
#include <comdef.h>

#include <string>
#include <list>
typedef std::list< std::basic_string<TCHAR> > string_list;
Run Code Online (Sandbox Code Playgroud)

TestingContextMenu.h仅包含已添加/更改的部分

#include "stdafx.h"
using namespace std;
class ATL_NO_VTABLE CTestingContextMenu:
        public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<CTestingContextMenu, &CLSID_TestingContextMenu>,
    public IShellExtInit,
    public IContextMenu
    {
        // Comment out or remove IDispatch
BEGIN_COM_MAP(CMainMagnimbusContextMenu)
    //COM_INTERFACE_ENTRY(ITestingContextMenu)
    //COM_INTERFACE_ENTRY(IDispatch)
    COM_INTERFACE_ENTRY(IShellExtInit) …
Run Code Online (Sandbox Code Playgroud)

c++ atl contextmenu shell-extensions visual-studio-2010

5
推荐指数
1
解决办法
1184
查看次数