【发布时间】:2017-09-26 17:28:12
【问题描述】:
我正在尝试在 VCL 中使用 FMX。看起来有一个容器 TFireMonkeyContainer 。我在它生成的 hpp 上收到错误“不是允许的类型”。这是错误代码的样子
__property HWND FireMonkeyFormHandle = {read=GetHostedFMXFormWindowHandle, nodefault};
基本上我从github编译了10.1的西雅图项目,并使用了它生成的bpl和hpp。
有人在 C++ 中使用过这个容器吗?
谢谢。
【问题讨论】:
-
FireMonkeyFormHandle被声明为published。HWND不是已发布属性的有效数据类型。此外,该属性无论如何都是只读的,这是已发布属性的另一个禁忌。作者犯了一个编码错误。更改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