Este es uno de los problemas más interesantes que he encontrado recientemente. Tenemos un programa heredado de Delphi 5 (las referencias de Rave Reports 4 impiden la actualización a D2007).Delphi 5 causa EAccessViolation cuando se agrega manifiesto como recurso
Cuando el programa se compila con nuestro recurso de versión generado por la plantilla, funciona bien. El problema surge cuando también se agrega el recurso de manifiesto generado por la plantilla al dpr de un programa.
manifiesto es un archivo "genérico" ASCII:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
name="Name"
processorArchitecture="x86"
version="2.0.0.0"
type="win32"/>
<description>Desc</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
</application>
</compatibility>
</assembly>
En App.dpr hay una referencia de recurso manifiesta:
{$R 'manifest.res' 'manifest.rc'}
Manifiesto se compila llamando:
C:\Program Files\Borland\Delphi5\Bin\brcc32.exe manifest.rc
Y cuando el programa se inicia después de la excepción se plantea:
exception class : EAccessViolation
exception message : Access violation at address 75A1A890 in module 'KERNELBASE.dll'. Read of address 00000001.
pila de llamadas de hilo principal:
main thread ($1144):
75a1a890 +007 KERNELBASE.dll
75a1a97c +069 KERNELBASE.dll WideCharToMultiByte
73f28764 +048 comctl32.dll #342
777741f4 +016 user32.dll CallWindowProcA
00092de2 +0ca app.exe Controls TWinControl.DefaultHandler
0009336c +01c app.exe Controls TWinControl.WMNotify
000c2454 +024 app.exe ComCtrls TCustomListView.WMNotify
00090249 +111 app.exe Controls TControl.WndProc
00092d0a +1d2 app.exe Controls TWinControl.WndProc
000c39ea +072 app.exe ComCtrls TCustomListView.WndProc
0009290c +02c app.exe Controls TWinControl.MainWndProc
000a5880 +014 app.exe Forms StdWndProc
77757690 +044 user32.dll SendMessageW
777741f4 +016 user32.dll CallWindowProcA
000c1e6f +0c7 app.exe ComCtrls TCustomListView.HeaderWndProc
000a5880 +014 app.exe Forms StdWndProc
7763642b +02b ntdll.dll KiUserCallbackDispatcher
77753573 +00a user32.dll DispatchMessageA
000ae8c7 +083 app.exe Forms TApplication.ProcessMessage
000ae8fe +00a app.exe Forms TApplication.HandleMessage
000aeb09 +081 app.exe Forms TApplication.Run
00186ecf +077 app.exe mca initialization
75b61192 +010 kernel32.dll BaseThreadInitThunk
comctl32.dll Vinculado:
73f00000 comctl32.dll 6.10.7600.16385 C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7600.16385_none_421189da2b7fabfc
Por lo que puedo ver el problema está vinculado con algunos de Delphi 5 incompatibilidades con los controles Comctl32.dll . Actualicé Delphi VCL a la más reciente. ¿Hay alguna otra solución que simplemente migrar a D2007?
Migrar a Delphi 2007 es una buena idea. Entonces solo tienes cuatro años de retraso en lugar de 12. –
Para el software listo para usar no podría estar más de acuerdo. Sin embargo, esta es una "aplicación" a medida de "una sola vez" y el trabajo se compensa en consecuencia. La actualización de Delphi 2007 es sencilla, siempre que Rave no esté involucrado. Delphi 2009 no necesariamente (estoy hablando de un código de calificación diario). – too