2010-04-24 25 views
5

Estoy intentando construir una versión de depuración de rtl140.bpl para facilitar las tareas de depuración con paquetes de tiempo de ejecución. Construí el DPK y ejecuté DCC32 sobre él, y se abre paso, luego muere.Las variantes se usan recursivamente?

C: \ Archivos de programa (x86) \ Embarcadero \ RAD Studio \ 7.0 \ source \ Win32 \ RTL \ sys \ Variants.pas (1072) Fatal: Programa F2092 o unidad 'variantes' utiliza de forma recursiva en sí

Pero mirando Variants.pas, no puedo ver cómo. Solo utiliza SysUtils y Types en la sección de la interfaz, y ninguno de los dos usa variantes, ni usa nada que use variantes.

¿Alguien tiene alguna idea de por qué esto está rompiendo?

Respuesta

11

Ésta es una de las principales razones por las que (el equipo de RAD Studio) no recomendamos reconstruir el paquete RTL núcleo. Se debe hacer con mucho cuidado y las unidades deben figurar en la sección contiene en un orden específico.

variantes es un poco de una unidad de "bastardo". El compilador tiene un conocimiento específico de tal manera que cuando vea el uso del tipo de Variante, automáticamente agregará Variantes a la lista de usos para asegurar que el soporte RTL actual para el tipo de Variante esté presente. System.pas difiere la mayoría de todas las operaciones de variantes a la unidad de variantes, pero como System no puede usar otras unidades distintas de SysInit (que también es una unidad muy especial), el compilador debe involucrarse.

En este momento, no tengo ningún sugerencias específicas para hacer este trabajo, aparte de tratar de reorganizar la lista contiene en el .dpk y vuelve a intentarlo. Aquí está la lista contiene desde el rtl.dpk que utilizamos para construir ese paquete:

Variants in 'sys\Variants.pas', 
VarUtils in 'sys\VarUtils.pas', 
SysConst in 'sys\SysConst.pas', 
SysUtils in 'sys\SysUtils.pas', 
SyncObjs in 'common\SyncObjs.pas', 
Types in 'sys\Types.pas', 
VCLCom in 'common\VCLCom.pas', 
ComConst in 'common\ComConst.pas', 
ComObj in 'common\ComObj.pas', 
ComObjWrapper in 'common\ComObjWrapper.pas', 
RTLConsts in 'common\RTLConsts.pas', 
Contnrs in 'common\Contnrs.pas', 
ConvUtils in 'common\ConvUtils.pas', 
DateUtils in 'common\DateUtils.pas', 
IniFiles in 'common\IniFiles.pas', 
Masks in 'common\Masks.pas', 
Math in 'common\Math.pas', 
Registry in 'common\Registry.pas', 
StdConvs in 'common\StdConvs.pas', 
StdVCL in 'common\StdVCL.pas', 
StrUtils in 'common\StrUtils.pas', 
TypInfo in 'common\TypInfo.pas', 
VarConv in 'common\VarConv.pas', 
VarCmplx in 'common\VarCmplx.pas', 
Classes in 'common\Classes.pas', 
MaskUtils in 'common\MaskUtils.pas', 
HelpIntfs in 'common\HelpIntfs.pas', 
ScktComp in 'common\ScktComp.pas', 
AccCtrl in 'win\AccCtrl.pas', 
AclAPI in 'win\AclAPI.pas', 
ActiveX in 'win\ActiveX.pas', 
ComSvcs in 'win\ComSvcs.pas', 
ADOInt in 'win\ADOInt.pas', 
AspTlb in 'win\AspTlb.pas', 
COMAdmin in 'win\COMAdmin.pas', 
CommCtrl in 'win\CommCtrl.pas', 
CommDlg in 'win\CommDlg.pas', 
Cpl in 'win\Cpl.pas', 
DDEml in 'win\DDEml.pas', 
Dlgs in 'win\Dlgs.pas', 
DwmApi in 'win\DwmApi.pas', 
FlatSB in 'win\FlatSB.pas', 
ImageHlp in 'win\ImageHlp.pas', 
Imm in 'win\Imm.pas', 
Isapi in 'win\Isapi.pas', 
Isapi2 in 'win\Isapi2.pas', 
LZExpand in 'win\LZExpand.pas', 
Mapi in 'win\Mapi.pas', 
Messages in 'win\Messages.pas', 
MMSystem in 'win\MMSystem.pas', 
msxml in 'win\msxml.pas', 
Mtx in 'win\Mtx.pas', 
MultiMon in 'win\MultiMon.pas', 
Nb30 in 'win\Nb30.pas', 
Ns30Fix in 'win\Ns30Fix.pas', 
Ns35Fix in 'win\Ns35Fix.pas', 
Ns36Fix in 'win\Ns36Fix.pas', 
Nsapi in 'win\Nsapi.pas', 
ObjComAuto in 'common\ObjComAuto.pas', 
ObjAuto in 'common\ObjAuto.pas', 
OleDB in 'win\OleDB.pas', 
OleDlg in 'win\OleDlg.pas', 
OpenGL in 'win\OpenGL.pas', 
oleacc in 'win\oleacc.pas', 
Penwin in 'win\Penwin.pas', 
PsAPI in 'win\PsAPI.pas', 
RegStr in 'win\RegStr.pas', 
RichEdit in 'win\RichEdit.pas', 
ShellAPI in 'win\ShellAPI.pas', 
SHFolder in 'win\SHFolder.pas', 
ShlObj in 'win\ShlObj.pas', 
ShLwApi in 'win\ShLwApi.pas', 
StrHlpr in 'sys\StrHlpr.pas', 
TlHelp32 in 'win\TlHelp32.pas', 
UrlMon in 'win\UrlMon.pas', 
UxTheme in 'win\UxTheme.pas', 
VarHlpr in 'sys\VarHlpr.pas', 
WideStrings in 'common\WideStrings.pas', 
WideStrUtils in 'common\WideStrUtils.pas', 
windows in 'win\windows.pas', 
winInet in 'win\winInet.pas', 
Winsafer in 'win\Winsafer.pas', 
WinSock in 'win\WinSock.pas', 
winSpool in 'win\winSpool.pas', 
winSvc in 'win\winSvc.pas', 
CorError in 'win\CorError.pas', 
CorHdr in 'win\CorHdr.pas', 
Cor in 'win\Cor.pas', 
DXTypes in 'win\DXTypes.pas', 
DXFile in 'win\DXFile.pas', 
DxDiag in 'win\DxDiag.pas', 
D3DX8 in 'win\D3DX8.pas', 
D3DX9 in 'win\D3DX9.pas', 
Direct3D in 'win\Direct3D.pas', 
Direct3D8 in 'win\Direct3D8.pas', 
DX7toDX8 in 'win\DX7toDX8.pas', 
Direct3D9 in 'win\Direct3D9.pas', 
DirectDraw in 'win\DirectDraw.pas', 
DirectShow9 in 'win\DirectShow9.pas', 
DirectInput in 'win\DirectInput.pas', 
DirectSound in 'win\DirectSound.pas', 
DirectPlay8 in 'win\DirectPlay8.pas', 
DirectMusic in 'win\DirectMusic.pas', 
WMF9 in 'win\WMF9.pas', 
ZLibConst in 'common\ZLibConst.pas', 
ZLib in 'common\ZLib.pas', 
Character in 'common\Character.pas', 
Generics.Defaults in 'common\Generics.Defaults.pas', 
Generics.Collections in 'common\Generics.Collections.pas', 
Rtti in 'common\Rtti.pas', 
TimeSpan in 'common\TimeSpan.pas', 
Diagnostics in 'common\Diagnostics.pas', 
AnsiStrings in 'common\AnsiStrings.pas', 
TpcShrd in 'win\TpcShrd.pas', 
RtsCom in 'win\RtsCom.pas', 
MsInkAut in 'win\MsInkAut.pas', 
MsInkAut15 in 'win\MsInkAut15.pas', 
Manipulations in 'win\Manipulations.pas', 
IOUtils in 'common\IOUtils.pas', 
D2D1 in 'win\D2D1.pas', 
DxgiFormat in 'win\DxgiFormat.pas', 
Wincodec in 'win\Wincodec.pas', 
KnownFolders in 'win\KnownFolders.pas', 
ObjectArray in 'win\ObjectArray.pas', 
PropSys in 'win\PropSys.pas', 
PropKey in 'win\PropKey.pas', 
StructuredQuery in 'win\StructuredQuery.pas', 
StructuredQueryCondition in 'win\StructuredQueryCondition.pas'; 
+0

Bueno, lo intenté y obtuve el mismo error. Supongo que no hay lugar en CC donde las versiones de depuración de los paquetes de tiempo de ejecución y sus DCP están disponibles? –

+0

(o incluso sólo una depuración BPL y DCP para rtl140. Podía reconstruir el resto con bastante facilidad, pero realmente necesita alguna manera de hurgar en el interior del sistema y Generics.Collections.) –

+0

Puede haber. Me parece recordar que Chris Hesik estaba trabajando para obtener un .dcp de depuración que funcionaría con el paquete rtl liberado. Sé que para el próximo lanzamiento planeamos proporcionar Debug .dcps para todos los paquetes de tiempo de ejecución. –

3

programa o unidad 'variantes' de forma recursiva utiliza en sí

suele estar relacionado con tener el camino de la fuente/win32/rtl/sys en la ruta de búsqueda de la Biblioteca del proyecto que está intentando compilar.

-1

Vaya a (Delpi_Path) \ source \ Win32 \ rtl \ sys, y cambie el nombre de "Variants.pas" a cualquier cosa, por ejemplo, "Variants.sav", y todo estará bien.

Es porque Delphi no puede encontrar "Variants.pas" en cualquier lugar ahora, pero todavía puede encontrar un archivo dcu compilado llamado "Variants.dcu" en alguna parte, así que eso es todo.

P.S. Si Delphi no puede encontrar el dcu también, debe buscar manualmente "Variants.dcu" y luego agregar la ruta en el menú "Herramientas -> Opciones".

Cuestiones relacionadas