【问题标题】:TFireMonkeyContainer in C++ projectsC++ 项目中的 TFireMonkeyContainer
【发布时间】:2017-09-26 17:28:12
【问题描述】:

我正在尝试在 VCL 中使用 FMX。看起来有一个容器 TFireMonkeyContainer 。我在它生成的 hpp 上收到错误“不是允许的类型”。这是错误代码的样子

__property HWND FireMonkeyFormHandle = {read=GetHostedFMXFormWindowHandle, nodefault};

基本上我从github编译了10.1的西雅图项目,并使用了它生成的bpl和hpp。

有人在 C++ 中使用过这个容器吗?

谢谢。

【问题讨论】:

  • FireMonkeyFormHandle 被声明为publishedHWND 不是已发布属性的有效数据类型。此外,该属性无论如何都是只读的,这是已发布属性的另一个禁忌。作者犯了一个编码错误。更改Parnassus.FMXContainer.pas 以使FireMonkeyFormHandle 成为public 而不是published,然后重新编译。
  • 这可以解决该错误。但现在我得到 fmx 和 vcl 歧义错误。使用完全作用域的类型似乎并不能解决它。 ide 阻止保存并且 dfm 没有出现。也许 fmx 和 vcl 不能在 C++ builder 中混合使用。谢谢。
  • Delphi 生成的 HPP 文件在它们的底部有 using namespace ... 语句,因此很可能同名的 VCL 和 FMX 符号被转储到全局命名空间中,因此存在歧义。查看 HPP 文件以查看他们使用的特定 NO_USING_NAMESPACE_... 条件,然后根据需要在 C++ 项目选项中定义这些条件。或者,只需定义 DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE 条件。
  • @RemyLebeau 谢谢...我定义了NO_USING_NAMESPACE_FMX_FORMS,因为 vcl 和 fmx 形式都包含在它们的 hpp 中。它现在编译并运行。但是我想要包含的 fmx 表单是不可见的。我想我必须联系作者,看看我是否能得到回复。感谢您的帮助。

标签: firemonkey c++builder


【解决方案1】:

最近的更新解决了这个问题,现在可以在 C++ 项目中正常使用。当同时包含 VCL 和 FMX 标头时,您可能需要小心(如您定义的NO_USING_NAMESPACE_FMX_FORMS 评论)。请拉the latest from github

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 2018-01-04
    • 1970-01-01
    相关资源
    最近更新 更多