如何在所有版本上动态地使用C ++访问Outlook中的提取联系人

时间:2013-06-05 06:48:05

标签: c++ com outlook

我想使用C ++从outlook(主要是联系人)中提取数据。我已经找到了方法:http://www.codeproject.com/Articles/3695/Importing-contacts-from-Outlook?msg=3005747#xx3005747xx

但是这里的import语句是硬编码的:#import“E:\ Program Files \ Common Files \ Microsoft Shared \ Office10 \ mso.dll”

是否可以动态加载dll和tlb文件并使用它,以便软件可以在不同版本的outlook和windows中工作。 (目前通过硬编码,我无法访问不同版本的Outlook,因为路径不同)

2 个答案:

答案 0 :(得分:0)

导入这样的DLL并不意味着您以任何方式链接到相关的DLL。它只是意味着它将导入DLL包含的类型库。类型库将描述您要使用的COM组件:接口,coclasses,guids,iids,枚举等。

在运行时,当您实例化COM类时,COM将从标记为the one that serves it的组件创建它的实例。因此,在Office案例中,如果您仅安装了Office 14,则Office 14将被标记为此类的COM服务器,您甚至不知道实际上将加载哪个DLL。

即使你硬编码你所依赖的Office类型库的版本,它也应该适用于后续版本的Office,因为COM依赖于永远不会改变的二进制契约。

当然,如果您导入Office 10库,您将无法使用说Office 14更新的组件。

答案 1 :(得分:0)

不是将#import指向文件,而是提供类名或类型库GUID。 http://msdn.microsoft.com/en-us/library/8etzzkb6(v=vs.71).aspx