2011-10-12 5 views
5

यह हाल ही में मिली सबसे दिलचस्प समस्याओं में से एक है। हमारे पास विरासत डेल्फी 5 प्रोग्राम है (राव रिपोर्ट 4 संदर्भ डी 2007 में अपग्रेड करने से रोक रहे हैं)।डेल्फी 5 ईएसेव उल्लंघन का कारण बनता है जब मैनिफेस्ट संसाधन के रूप में जोड़ा जाता है

जब हमारे टेम्पलेट द्वारा जेनरेट किए गए संस्करण संसाधन के साथ प्रोग्राम संकलित किया जाता है तो यह ठीक काम करता है। समस्या तब उत्पन्न होती है जब टेम्पलेट से उत्पन्न मेनिफेस्ट संसाधन को प्रोग्राम के डीपीआर में जोड़ा जाता है।

C:\Program Files\Borland\Delphi5\Bin\brcc32.exe manifest.rc 
: फोन करके

{$R 'manifest.res' 'manifest.rc'} 

प्रकट संकलित किया गया है:

<?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> 

App.dpr में एक प्रकट संसाधन संदर्भ है:

प्रकट एक "सामान्य", ASCII फ़ाइल है

और जब अपवाद के बाद प्रोग्राम शुरू किया जाता है:

मुख्य थ्रेड के लिए
exception class : EAccessViolation 
exception message : Access violation at address 75A1A890 in module 'KERNELBASE.dll'. Read of address 00000001. 

कॉल स्टैक:

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:

73f00000 comctl32.dll   6.10.7600.16385 C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7600.16385_none_421189da2b7fabfc 

मैं क्या देख सकते हैं समस्या comctl32.dll नियंत्रण के साथ कुछ डेल्फी 5 असंगतियां के साथ ही है से । मैंने हाल ही में डेल्फी वीसीएल को अपडेट किया। क्या डी2007 में माइग्रेट करने से कोई अन्य समाधान है?

+1

डेल्फी 2007 में माइग्रेट करना एक अच्छा विचार है। फिर आप 12 साल के बजाय केवल चार साल की तारीख से बाहर हैं। –

+0

शेल्फ सॉफ्टवेयर के लिए मैं और अधिक सहमत नहीं हो सका। फिर भी यह एक "एक बार" पुराना bespoke ऐप "ताज़ा करने" है और नौकरी के अनुसार मुआवजा दिया जाता है। डेल्फी 2007 अपग्रेड तब तक दर्द रहित है जब तक कि राव शामिल नहीं है। डेल्फी 200 9 जरूरी नहीं है (मैं दैनिक wtf योग्यता कोड बात कर रहा हूँ)। – too

उत्तर

5

यदि आपको सही ढंग से याद किया जाता है तो आपको केवल मैनिफेस्ट की आवश्यकता है। आपको Mike Lischke's theme manager component की भी आवश्यकता है। अंततः इस कोड को डेल्फी 7 में अपना रास्ता मिला।

+0

हाँ, वह था। साइड इफेक्ट के रूप में, एप्लिकेशन अब बेहतर दिखता है - धन्यवाद। – too

+1

बस इस उत्तर में थोड़ा सा जोड़ने के लिए, यदि आपके पास एक थीम के बिना विंडोज 7 (या 2008 सर्वर) है (डीसी राजनीति के कारण), कम से कम 64-बिट संस्करणों पर, आपको यह त्रुटि भी मिलती है ... केवल जवाब मैंने पाया है पूरी तरह से थीम्स को हटाने के लिए है। – Chiguireitor

संबंधित मुद्दे