我想使用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,因为路径不同)
答案 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