【问题标题】:How to include FMX.Types inside a VCL project如何在 VCL 项目中包含 FMX.Types
【发布时间】:2017-07-17 22:18:46
【问题描述】:

我需要调用在 FMX.Types 中定义的Log.d。但是我的项目不是 Firemonkey 项目,而是 VCL 项目。它按预期编译和工作,但我收到此警告:

[dcc64 提示] H2161 警告:重复资源:类型 12(CURSOR 组),ID 32761;文件 c:\程序文件 (x86)\embarcadero\studio\18.0\lib\Win64\release\FMX.Controls.Win.res 资源保留;文件 c:\程序文件 (x86)\embarcadero\studio\18.0\lib\Win64\release\Controls.res 资源 丢弃。

他们是否有任何全局定义可以表明该项目是一个 VCL 项目,以便我可以省略在 VCL 项目上使用 FMX.Types 和 Log.d

【问题讨论】:

  • 问题是什么。是否要检测项目是否为 FMX?或者您想在 VCL 项目中包含 FMX 单元?你似乎都问了。请只问一个问题。
  • 任何论文!因为它们都是我问题的解决方案。所以检测项目是 FMX(从项目中排除 fmx 单元) - 或 - 在 vcl 项目中包含 fmx 单元的任何方式
  • 请选择一个。你不能同时问两个问题。不过,为了帮助您选择一个,我可以告诉您,没有任何条件可以将项目标识为 FMX。
  • 我是否可以建议通过简单地调用OutputDebugString 而不是担心调用Log.d 来回避整个问题,从而无需拉入该FMX 单元? Log.d 在 Windows 上调用 OutputDebugString - 您可以轻松地创建一个包装例程,该例程采用与 Log.d 类似的参数。然后这个难题就消失了。
  • @blong:完美的解决方案,谢谢!!很遗憾你把它写成评论,因为它应该是一个可以接受的解决方案......

标签: delphi firemonkey


【解决方案1】:

为了扩展我的评论,您可以通过简单地“酿造自己的”Log.d 等价物来回避整个问题。 Log.d 在 Windows 上调用 OutputDebugString,因此您可以按照以下方式构建一些东西,并将 FMX.Types 辅助单元完全排除在外,并完全避免该问题:

uses Windows;

procedure Log(const Msg: string; const Args: array of const); overload;
var
  LMsg: string;
begin
  LMsg := Format(Msg, Args);
  OutputDebugString(PChar(LMsg));
end;

procedure Log(const Msg: string); overload;
begin
  OutputDebugString(PChar(Msg));
end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 2013-01-18
    • 2019-11-05
    • 2014-08-14
    • 2020-07-02
    • 2019-06-25
    • 2013-10-21
    相关资源
    最近更新 更多