2012-02-10 13 views
12

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:

  1. 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

  2. Agregando la carpeta con el archivo DirectShow9 (desde DSPack) al comienzo de la ruta del sistema y reiniciando. No funciona

  3. Añadiendo la carpeta con el archivo DirectShow9 al comienzo de la ruta de la biblioteca. No funciona

  4. Agregando la unidad DirectShow9 al paquete con la ruta explícita. No funciona

  5. 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.

  1. Puedo comentar el código problemático. Afortunadamente, es solo esta línea, todo lo demás compila con DirectShow9 de Delphi.

  2. Puedo cambiar el nombre de DirectShow9 de DSPack, pero luego puedo tener que corregir la parte de 'usos' en diferentes aplicaciones.

  3. 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.

+0

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

+0

Oh, sí, intenté esto también. Actualizaré la pregunta. – gabr

+0

maldición ... Me preocupa que hayan roto algo en XE2 ... ¿has intentado instalarlo en D2010? – ComputerSaysNo

Respuesta

3

Me enfrenté al mismo problema, y ​​simplemente comenté todas las líneas problemáticas (había 2 o 3 de ellas). Todo funciona perfectamente bien.

Otra opción es utilizar la última DSPack (que es compatible con XE2): http://code.google.com/p/dspack/

O puede cambiar el nombre de archivo de DirectShow9 DSPack, como se discute aquí: http://www.progdigy.com/forums/viewtopic.php?p=16971

+0

Interesante, pensé que tenía DSPack nuevo. De hecho, estaba seguro de eso. Fui con el enfoque de comentarios al final, también. – gabr

Cuestiones relacionadas