2013-06-05 17 views
1

我想使用C++从outlook(主要是联系人)中提取数据。我已经找到了如何做到这一点的:http://www.codeproject.com/Articles/3695/Importing-contacts-from-Outlook?msg=3005747#xx3005747xx如何在Outlook中使用C++动态访问提取联系人

但这里的import语句进行硬编码:#进口 “E:\ Program Files文件\ Common Files文件\ Microsoft共享\ OFFICE10 \ MSO.DLL”

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

+0

如何在[GetProcAddress]中使用旧式[LoadLibrary](http://msdn.microsoft.com/en-us/library/windows/desktop/ms684175%28v=vs.85%29.aspx) (http://msdn.microsoft.com/en-us/library/windows/desktop/ms683212%28v=vs.85%29.aspx)? – mvp

+0

@mvp:我检查了Loadlibrary,但是我对使用GetProcAddress和本链接中的代码感到困惑:http://www.codeproject.com/Articles/3695/Importing-contacts-from-Outlook?msg=3005747# xx3005747xx,还有导入所需的.tlb文件的问题。感谢您的评论。 – pjesudhas

回答

0

像这样导入一个DLL并不意味着你以任何方式链接到有问题的DLL。它意味着它将导入DLL包含的类型库。类型库将描述你想要使用的COM组件:interfaces,coclasses,guids,iids,enums等。

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

即使您对所依赖的Office类型库的版本进行硬编码,它也应该能够与Office的后续版本一起工作,因为COM依赖于永远不应更改的二进制合约。

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

+0

非常感谢您的信息。我会检查你的想法。我认为它加载了整个DLL。再次感谢。 – pjesudhas

+0

IT在不同的系统上工作,谢谢 – pjesudhas