无法在XE2中编译包含DSUtils的包

时间:2012-02-10 11:23:49

标签: delphi delphi-xe2

我正在尝试编译一个包含DSUtils.pas(DSPack的一部分)的软件包,但它失败了,因为它试图编译错误的DirectShow9.pas单元 - 不是DSPack中的那个,而是来自Delphi XE2的那个(更新3)RTL。

使用最小的包可以重复该问题:

package Package1;

{$R *.res}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$IMPLICITBUILD ON}

requires
  rtl;

contains
  DSUtils in 'x:\common\pkg\dspack\src\DSPack\DSUtils.pas';

end.

错误发生在DSUtils第1058行,错误为Undeclared identifier: FrameRateCode

Result.FrameRateCode := (x and $00000003) shr 00;

Undeclared是'FrameRateCode' - 在结果上按住Ctrl键将我们带到Winapi.DirectShow9(在RTL文件夹中),该文件没有声明此字段。

有趣的部分 - 如果我转到DSUtils使用列表,单击DirectShow9并按Ctrl + Enter,将打开设备的DSpack版本(并且此单元已定义FrameRateCode字段)。所以德尔福知道这个单位在哪里。它只是尝试使用错误的DirectShow9来编译包。

有趣的花絮:如果我正在编译使用DSUtils的普通应用程序(非包),一切正常。

我尝试了什么:

  1. 将DSPack中的DirectShow9编译成自己的软件包(实际上我使用的是来自DSPack的DirectX9软件包,其中包含DirectX9文件夹中的所有文件)并将其添加到“需求”列表中。不起作用。

  2. 将带有DirectShow9文件的文件夹(来自DSPack)添加到系统路径的开头并重新启动。不起作用。

  3. 将包含DirectShow9文件的文件夹添加到库路径的开头。不起作用。

  4. 使用显式路径将DirectShow9单元添加到包中。不起作用。

  5. 将DirectX9 * .pas复制到DSPack文件夹中,以便DirectShow9单元与DSUtils单元位于同一文件夹中。不起作用。

  6. 我看到了三种可能的解决方法,但我对其中任何一种都不满意。

    1. 我可以注释掉有问题的代码。幸运的是,只有这一行,其他一切都与Delphi的DirectShow9一致。

    2. 我可以从DSPack重命名DirectShow9但是我可能需要修复不同应用程序中的“使用”部分。

    3. 我可以使用'Winapi'关闭自动添加前缀。但是这会让我有很多额外的工作来编辑成千上万的文件。

    4. 我真正希望看到的是让XE2使用正确的源文件。

1 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,我只是评论了所有问题行(其中有2个或3个)。一切都很好。

另一种选择是使用最新的DSPack(与XE2兼容):http://code.google.com/p/dspack/

或者您可以重命名DSPack的DirectShow9文件,如下所述:http://www.progdigy.com/forums/viewtopic.php?p=16971