2015-10-27 12 views
1

我正在开发一个程序,该程序将打开默认邮件客户端发送带附件的邮件。我在Windows x64 (8.1),使用VS2012,建筑x64。我认为正确的方法是使用MAPISendMailW链接MAPISendMailW?

我加MAPI32.lib项目设置(Linker->AdditionalDependencies),和建筑/VERBOSE:LIB表明,它试图找到MAPI32.libMAPISendMailW。不过我得到

error LNK2019: unresolved external symbol MAPISendMailW referenced in function ...

所以最后我通过

dumpbin.exe -headers MAPI32.lib >> to_some_textfile.txt

,并检查MAPI32.lib的内容 - 哦,很好 - 没有MAPISendMailW

我该怎么做才能使用MAPISendMailW

回答

1

我试过VS2k10(Ultimate)和VS2k13(Ultimate)。在前者中,由于它在MAPI.h中不存在,所以不编译,而在后者中,包含文件甚至不存在。

那么你是如何在编辑阶段过去的?你定义了函数头吗?因为我觉得奇怪的是函数定义在VS2k12包含文件中,但不在相应的lib文件中。

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

或者,你可以尝试替代方案中,mapi32.dll动态加载(在运行时)的MAPISendMailW功能(而不再依靠MAPI.hMAPI32.lib)使用LoadLibrary/GetProcAddress,但最有可能你必须定义附加的东西(像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; 
+0

谢谢ÿ ou - Win8SDK已安装,但我实际上已经在使用Win10。仍然:它直接从Win8SDK获取标题和导入库。 我也觉得很奇怪,所以我猜我最好的选择是'LoadLibrary/GetProcAddress'。 – St0fF

+0

P.S .:参见http://pastebin.com/kqUfMUB8上的C:\ Program Files文件(x86)\ Windows Kits \ 8.0 \ Include \ um \ MAPI.h' - 行139ff:结构声明;第263ff行:闭包定义,类型定义,函数声明 – St0fF

+1

我已经安装了W8SDK。查看[MSDN文档](https://msdn.microsoft.com/en-us/library/hh802867(v = vs.85).aspx)(在_Requirements_部分中没有提及.lib文件),并且在头文件我注意到函数被定义为一个指针(就像我定义的那样),所以这是用这种方式。因此,为所有定义包含'MAPI.h',然后'MAPI32.lib'不是必需的(至少对于这个func),而是使用动态加载。 – CristiFati