gpt4 book ai didi

c++ - 如何自定义数据链接属性对话框中的连接选项卡?

转载 作者:太空宇宙 更新时间:2023-11-04 12:59:05 25 4
gpt4 key购买 nike

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

当在 Provider 选项卡中选择不同的 OLEDB Provider 时,我注意到其中一些的 Connection 选项卡看起来非常不同,例如SQL Server Native Client 11.0 .

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

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

谢谢!


编辑

显然,我接受答案太快了。我按照描述执行了所有步骤。当我在我自己的创建属性表的测试应用程序中使用我的提供程序时,一切正常[漂亮][3]。我的测试应用调用 ISpecifyPropertyPages::GetPages在我的提供商上并将结果传递给 OleCreatePropertyFrame如答案中所述。

但是,当我将它与“数据链接”对话框一起使用时,一旦我选择了我的提供者并单击“下一步”按钮或其中一个选项卡,这些选项卡就会消失。只有提供商选项卡保留。调试它我可以看到 GetPages已成功调用,但随后仅调用了我的 ConnectionTab 的构造函数(没有任何错误),紧接着选项卡消失了(没有崩溃!)。没有 IPropertyPage方法或其他任何东西都没有被调用。知道可能是什么问题吗?


编辑 - 已解决

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

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

最佳答案

这在此处描述:Interfaces Implemented by the Provider

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

系统将使用OLEDB_SVC_DSLPropertyPages(来自MSDAGUID.H)作为服务guid 和ISpecifyPropertyPages 调用此IServiceProvider 实现。作为接口(interface) ID。

ISpecifyPropertyPages::GetPages Fills a counted array of GUID values, where each GUID specifies the CLSID of each property page that can be displayed in the property sheet for this object. GetPages is called by the Data Link core component to get an array of exactly two CLSIDs that represent the extensible property pages: the first to replace the Connection tab, and the second to replace the Advanced tab. These pages must be registered properly so that they can be cocreated by the Data Link core component in-process.

这些属性页是标准 Windows property pages .

关于c++ - 如何自定义数据链接属性对话框中的连接选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45058074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com