1

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

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

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

4

2 回答 2

0

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

于 2013-06-05T14:58:15.057 回答
0

像这样导入 DLL 并不意味着您以任何方式链接到有问题的 DLL。这只是意味着它将导入 DLL 包含的类型库。类型库将描述您要使用的 COM 组件:接口、coclasses、guid、iid、枚举等。

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

即使您对所依赖的 Office 类型库版本进行硬编码,它也应该适用于 Office 的后续版本,因为 COM 依赖于永远不会更改的二进制合同。

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

于 2013-06-05T07:34:53.533 回答