通过 C API 提供 QWidget 的 DLL
Posted
技术标签:
【中文标题】通过 C API 提供 QWidget 的 DLL【英文标题】:DLL providing QWidget over C API 【发布时间】:2013-04-17 12:43:22 【问题描述】:我有一个使用 C API 动态加载 DLL 的 Qt 主应用程序。我不能使用 Qt 插件,因为一些 DLL 是纯 C 的。
现在我希望 DLL 能够使主 Qt 应用程序打开一个窗口,装饰它并添加 DLL 提供的 QWidget。
我担心如果我只是将它作为 void* 推送并将其添加为 QWidget,主应用程序将在窗口关闭时尝试释放它,这可能会导致未定义的行为。
【问题讨论】:
为什么不直接将创建 QWidget 的回调函数传递给 DLL? 那么几个DLL是纯C的,不能在Qt插件系统之外加载吗? @user1095108 他们都应该使用相同的API,我不想写两次。他们大多只实现 API 的一部分,例如C DLL 不会实现 Qt 钩子。 【参考方案1】:主要问题是主应用程序是动态还是静态链接到 Qt。如果是动态的,则解决了静态数据共享的问题(因为它主要驻留在 DLL 中)。
没有更多细节,我只会说“试试看”,看看有什么问题。
【讨论】:
动态链接。实际上,试一试也不错,尤其是因为我没有任何其他想法。 它实际上似乎工作。我不知道如何或为什么,但确实如此。我在 DLL 中创建 QWidget 并将其传递给主应用程序,主应用程序将其放在窗口中。我什至可以调用 reinterpret_cast以上是关于通过 C API 提供 QWidget 的 DLL的主要内容,如果未能解决你的问题,请参考以下文章
Qt系列文章之三十八(基于QWidget 创建和使用动态dll共享库)
在通过 API Endpoint 或通过 Dll 引用访问 WCF 之间进行选择