我正在开发一个程序,该程序将打开默认邮件客户端以发送带附件的邮件。我在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
我需要做什么?
答案 0 :(得分:1)
我尝试使用VS2k10(Ultimate)和VS2k13(Ultimate)。在前者中它没有编译,因为MAPI.h
中没有它,而在后者中,包含文件甚至不存在。
那你是如何在编译阶段过去的呢?你定义了函数头吗?因为我觉得奇怪的是函数定义在VS2k12包含文件中但不在相应的lib文件中。
在尝试构建应用的计算机上安装Windows 8 SDK。
或者,您可以尝试使用MAPISendMailW
动态加载(在运行时)mapi32.dll
函数(并且不再依赖MAPI.h
和MAPI32.lib
){ {3}} / LoadLibrary,但除了函数指针定义之外,您很可能还需要定义其他内容(如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;