delphi 2006,自定义组件中的SynTaskDialog编译错误

Pre*_*ias 2 delphi delphi-7 delphi-2006 custom-component

我工作的组件,用于delphi 7delphi 2006,组件使用SynTaskDialog.passynopse,我已经成功地使用了SynTaskDialog.pasdelphi 7成分,但是当我试图在使用它delphi 2006来创建组件包.我收到一个错误

在此输入图像描述

我在synopse.info/forum上找到了相同的解决方案


引用:

我找到了两个解决方法:要么

  1. 用字符串数组替换指针数组
  TD_ICONS_IDENT: array[TTaskDialogIcon] of string =(
    '', SMsgDlgWarning, SMsgDlgConfirm, SMsgDlgError, SMsgDlgInformation,
    '', SMsgDlgInformation);
Run Code Online (Sandbox Code Playgroud)

并删除一些LoadResString调用或

2.使用类似函数替换指针数组

  GetIconIdent(TTaskDialogIcon): Pointer
Run Code Online (Sandbox Code Playgroud)

但即便如此,我无法编译组件的包.而这些错误来了

 [Pascal Error] E2201 Need imported data reference ($G) to access 'SMsgDlgOK' from unit 'SynTaskDialog'
 [Pascal Error] E2201 Need imported data reference ($G) to access 'SMsgDlgYes' from unit 'SynTaskDialog'
 [Pascal Error] E2201 Need imported data reference ($G) to access 'SMsgDlgNo' from unit 'SynTaskDialog'
 [Pascal Error] E2201 Need imported data reference ($G) to access 'SMsgDlgCancel' from unit 'SynTaskDialog'
 [Pascal Error] E2201 Need imported data reference ($G) to access 'SMsgDlgRetry' from unit 'SynTaskDialog'
 [Pascal Error] E2201 Need imported data reference ($G) to access 'SCloseButton' from unit 'SynTaskDialog'
Run Code Online (Sandbox Code Playgroud)

Arn*_*hez 9

你为什么不问项目论坛的问题?

解决方案可能会增强此开源单元的官方代码.

好的 - 它可以帮助我获得一些SO点.;)

AFAIK这个"E2001"问题已经确定 - 请参阅这篇文章,并且应该在最新的主干中修复.这听起来与Delphi 7一起使用,但不适用于Delphi 2006.

以下是此编译器错误的潜在解决方法:

定义这样一个功能:

function IconMessage(Icon: TTaskDialogIcon): string;
begin
  case Icon of
    tiWarning:   result := SMsgDlgWarning;
    tiQuestion:  result := SMsgDlgConfirm;
    tiError:     result := SMsgDlgError;
    tiInformation, tiShield: result := SMsgDlgInformation;
    else result := '';
  end;
end;
Run Code Online (Sandbox Code Playgroud)

要这样使用:

if Inst='' then
  Inst := IconMessage(aDialogIcon);
Run Code Online (Sandbox Code Playgroud)

现在,它已在项目主干中提交.

感谢您使用我们的开源组件!