首页 > 解决方案 > MAPI 存根库无法为 Outlook 2016(64 位)初始化 MAPI

问题描述

我的电脑是 Windows 7(64 位),然后安装 Outlook 2016(64 位)。

然后我按照https://docs.microsoft.com/en-us/office/client-developer/outlook/mapi/how-to-link-to-mapi-functions?redirectedfrom=MSDN中的说明使用 MAPIStubLibrary。

我使用的 MAPIStubLibrary 版本更新于 2018-02-26。

我将 MapiStubLibrary.cpp 和 StubUtils.cpp 直接包含到我的项目中。然后我调用以下行来初始化 MAPI:

if (MAPIInitialize(NULL) != S_OK)
  AfxMessageBox(_T("Initialize MAPI fails!"));

但是,当调用上面的代码时,我会看到一个消息框说“

Either there is no default mail client or the current mail client cannot fulfill the messaging request. Please run Microsoft Outlook and set it as the default mail client.

并且函数 MAPIInitialize(NULL) 将返回 E_FAIL。但我已将 Outlook 2016(64 位)设置为默认邮件客户端。

我想也许我需要将 MAPIStubLibrary 更新到最新版本,所以我去https://github.com/stephenegriffin/MAPIStubLibrary然后下载最新版本。

然后将library文件夹下的所有文件复制到我的项目中,包括MapiStubLibrary.cpp、StubUtils.cpp和StubUtils.h。

然后我在VS2008中重建项目。但是,这次我遇到了很多错误:

.\MAPIStubLibrary\MapiStubLibrary.cpp(1155) : error C2065: 'nullptr' : undeclared identifier
.\MAPIStubLibrary\StubUtils.cpp(44) : error C2039: 'function' : is not a member of 'std'
.\MAPIStubLibrary\StubUtils.cpp(44) : error C2143: syntax error : missing ';' before '<'
.\MAPIStubLibrary\StubUtils.cpp(44) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
.\MAPIStubLibrary\StubUtils.cpp(45) : error C2086: 'int mapistub::function' : redefinition
        .\MAPIStubLibrary\StubUtils.cpp(44) : see declaration of 'mapistub::function'
.\MAPIStubLibrary\StubUtils.cpp(49) : error C2065: 'logLoadMapiCallback' : undeclared identifier

为什么?

更新:

我仔细检查并确认 Outlook 是 64 位的: 在此处输入图像描述

标签: c++visual-c++outlookmapi

解决方案


这意味着 Outlook 要么未安装,要么具有不同的位数。检查文件中的 Outlook 位数 | 办公室展望 | 关于展望。


推荐阅读