我正在开发一个程序,该程序应打开默认邮件客户端以发送带有附件的邮件。我在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.h
和MAPI32.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/