Estoy intentando compilar un paquete que contiene DSUtils.pas (parte de DSPack) y falla porque intenta compilar la unidad DirectShow9.pas incorrecta - no la de DSPack pero la uno de Delphi XE2 (Actualización 3) RTL.No se puede compilar el paquete que contiene DSUtils en XE2
El problema se puede repetir con un paquete mínimo: se produce
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.
El error en DSUtils línea 1058 y el error es Undeclared identifier: FrameRateCode
.
Result.FrameRateCode := (x and $00000003) shr 00;
no declarado es 'FrameRateCode' - CtrlClick en el resultado nos lleva a Winapi.DirectShow9 (en la carpeta RTL) que no tiene este campo declarado.
Pieza interesante: si voy a la lista de usos de DSUtils, hago clic en DirectShow9 y presiono Ctrl + Enter, se abrirá la versión DSpack de la unidad (y esta unidad tiene el campo FrameRateCode definido). Entonces Delphi sabe dónde está la unidad. Simplemente trata de compilar el paquete utilizando DirectShow9 incorrecto.
Información interesante: Si estoy compilando una aplicación normal (no incluida en el paquete) que usa DSUtils, todo funciona bien.
Lo que he intentado:
Compilación DirectShow9 del DSPack en su propio paquete (en realidad utilizó el paquete de DirectX9 DSPack que contiene todos los archivos de la carpeta DirectX9) y agregarlo a la 'requiere 'lista. No funciona
Agregando la carpeta con el archivo DirectShow9 (desde DSPack) al comienzo de la ruta del sistema y reiniciando. No funciona
Añadiendo la carpeta con el archivo DirectShow9 al comienzo de la ruta de la biblioteca. No funciona
Agregando la unidad DirectShow9 al paquete con la ruta explícita. No funciona
Copia de DirectX9 * .pas en la carpeta DSPack para que la unidad DirectShow9 esté en la misma carpeta que la unidad DSUtils. No funciona
Veo tres soluciones posibles, pero no estoy contento con ninguna de ellas.
Puedo comentar el código problemático. Afortunadamente, es solo esta línea, todo lo demás compila con DirectShow9 de Delphi.
Puedo cambiar el nombre de DirectShow9 de DSPack, pero luego puedo tener que corregir la parte de 'usos' en diferentes aplicaciones.
Puedo desactivar el prefijo automático con 'Winapi.' pero eso me causará mucho trabajo adicional editando miles y miles de archivos.
Lo que realmente me gustaría ver es cada vez XE2 para utilizar el archivo fuente correcta.
has necesitado añadir la unidad DirectShow9.pas al paquete? Recuerdo que tuve el mismo problema hace un tiempo, pero estaba intentando instalarlo en D2010, logré solucionarlo con cambios mínimos, pero no recuerdo cómo lo hice, son casi 2 años): – ComputerSaysNo
Oh, sí, intenté esto también. Actualizaré la pregunta. – gabr
maldición ... Me preocupa que hayan roto algo en XE2 ... ¿has intentado instalarlo en D2010? – ComputerSaysNo