我正在开发一个程序,该程序应打开默认邮件客户端以发送带有附件的邮件。我在Windows x64 (8.1)上,使用VS2012构建x64。我想出了使用MAPISendMailW的正确方法。

我在项目设置(MAPI32.lib)中添加了Linker->AdditionalDependencies,并使用/VERBOSE:LIB显示进行了构建,以尝试在MAPISendMailW中找到MAPI32.lib。我还是
error LNK2019: unresolved external symbol MAPISendMailW referenced in function ...
所以最后我通过检查了MAPI32.lib的内容
dumpbin.exe -headers MAPI32.lib >> to_some_textfile.txt
-哦,很好-没有MAPISendMailW

使用MAPISendMailW我需要做什么?

最佳答案

我用VS2k10(Ultimate)和VS2k13(Ultimate)进行了尝试。在前者中,由于MAPI.h中不存在该文件,因此无法编译,而在后者中,甚至没有包含文件。

那么您是如何在编译阶段通过的呢?您是否定义了函数头?因为我感到奇怪的是,函数定义在VS2k12包含文件中,但不在相应的lib文件中。

在尝试构建应用的计算机上安装Windows 8 SDK

或者,您可以尝试使用LoadLibrary / GetProcAddress(在运行时)从MAPISendMailW动态加载mapi32.dll函数(并且不再依赖MAPI.hMAPI32.lib),但是您很可能必须定义其他内容(例如lpMapiMessageW结构)除了函数指针定义:

typedef ULONG (WINAPI *MAPISendMailWPtr)(_In_ LHANDLE lhSession, _In_ ULONG_PTR lUIParam, _In_ lpMapiMessageW lpMessage, _In_ FLAGS flFlags, ULONG ulReserved);

@ EDIT1:附加一些示例代码:
#include <Windows.h>
#include <MAPI.h>

// Some lines of code
HMODULE mapi32Dll = NULL;
LPMAPISENDMAILW MAPISendMailWPtr = NULL;

if ((mapi32Dll = LoadLibrary("mapi32.dll")) == NULL) {
    printf("Error %d loading lib\n", GetLastError());
    return 0;
}
if ((MAPISendMailWPtr = (LPMAPISENDMAILW)GetProcAddress(mapi32Dll, "MAPISendMailW")) == NULL) {
    printf("Error %d loading func\n", GetLastError());
    FreeLibrary(mapi32Dll);
    return 0;
}

//ULONG result = MAPISendMailWPtr(....)
// Some more lines of code
FreeLibrary(mapi32Dll);
return 0;

关于c++ - 链接MAPISendMailW?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33378817/

10-11 11:58