【发布时间】:2017-12-16 21:43:05
【问题描述】:
我正在开发一个 OLEDB 提供程序,它现在利用 IDBPromptInitialize::PromptDataSource() 提供的“默认”连接对话框,看起来像 this。当我将我的提供程序与某些客户端工具(如 MS Excel 或 .udl 文件)一起使用时,会出现相同的 UI。我现在正计划创建自己的 UI。
在提供程序选项卡中选择不同的 OLEDB 提供程序时,我注意到其中一些连接选项卡看起来完全不同,例如SQL Server Native Client 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 的调用失败。
【问题讨论】:
标签: c++ user-interface com oledb atl