如何在"数据链接属性"对话框中自定义"连接"选项卡?

How to customize the Connection tab in the Data Link Properties dialog?

本文关键字:quot 连接 自定义 选项 链接 数据 属性 对话框      更新时间:2023-10-16

我正在开发一个OLEDB提供程序,该提供程序现在利用IDBPromptInitialize::PromptDataSource()提供的"默认"连接对话框,如下所示。当我将我的提供程序与某些客户端工具(如 MS Excel 或 .udl 文件(一起使用时,会出现相同的 UI。我现在计划创建自己的 UI。

在"提供程序">

选项卡中选择不同的OLEDB提供程序时,我注意到对于其中一些"连接"选项卡看起来完全不同,例如.SQL服务器本机客户端11.0。

因此,定制它似乎在技术上是可行的。我的问题是:如何?

注意:我知道我可以将自己的 UI 放在一起,并且可以随时弹出它。但这不会神奇地集成到"数据链接属性"对话框的"连接"选项卡中,对吗?

谢谢!


编辑

显然,我很快就接受了这个答案。我执行了描述的所有步骤。当我在自己的测试应用程序中使用我的提供程序来创建属性表时,一切都运行良好[漂亮][3]。我的测试应用调用我的提供程序ISpecifyPropertyPages::GetPages,并将结果传递给OleCreatePropertyFrame,如答案中所述。

但是,当我将它与"数据链接"对话框一起使用时,只要我选择我的提供程序并点击"下一步"按钮或其中一个选项卡,选项卡就会消失。仅保留"提供程序"选项卡。 调试它,我可以看到GetPages被成功调用,但随后只调用了我的 ConnectionTab 的构造函数(没有任何错误(,之后选项卡消失了(没有崩溃!没有调用IPropertyPage方法,也没有调用任何其他方法。 知道可能是什么问题吗?


编辑 - 已解决

好的,我知道了。在我的AdvancedTab类中,我缺少COM映射中的COM_INTERFACE_ENTRY(IPersistPropertyBag)。我过于关注"连接"选项卡,因为我想先让它工作。

如果有人感兴趣: 把#define _ATL_DEBUG_QI放在#include <atlcom.h>之前让我发现QueryInterface电话失败了IPersistPropertyBag

下面描述了这一点: 提供程序实现的接口

实现IIDBInitialize/IDBProperties的OLEDB提供程序的对象也必须实现IServiceProvider

系统将使用OLEDB_SVC_DSLPropertyPages(来自 MSDAGUID(调用此IServiceProvider实现。H( 作为服务 GUID,ISpecifyPropertyPages 作为接口 ID。

ISpecifyPropertyPages::GetPages Fills a counted GUID 值数组,其中每个 GUID 指定每个 GUID 的 CLSID 可在此属性表中显示的属性页 对象。GetPages 由数据链接核心组件调用,以获取 表示可扩展属性的两个 CLSID 的数组 页面:第一个用于替换"连接"选项卡,第二个用于替换">连接"选项卡 替换">高级"选项卡。这些页面必须正确注册,以便 它们可以由进程中的数据链路核心组件共同创建。

这些属性页是标准的 Windows 属性页。