का उपयोग कर के रूप में उपयोग संकलित किया गया था या तो डेल्फी 2007+ या लाजर (Win64) मैं निर्धारित करने के लिए एक dll 64 या 86 के रूप में संकलित किया गया है एक तरह से तलाश कर रहा हूँ?कैसे निर्धारित करें कि dll फ़ाइल 64 या 86 बिट या तो डेल्फी या लाजर
उत्तर
आप पढ़ सकते हैं और पीई हैडर पार्स चाहिए।
इस तरह:
function Isx64(const Strm: TStream): Boolean;
const
IMAGE_FILE_MACHINE_I386 = $014c; // Intel x86
IMAGE_FILE_MACHINE_IA64 = $0200; // Intel Itanium Processor Family (IPF)
IMAGE_FILE_MACHINE_AMD64 = $8664; // x64 (AMD64 or EM64T)
// You'll unlikely encounter the things below:
IMAGE_FILE_MACHINE_R3000_BE = $160; // MIPS big-endian
IMAGE_FILE_MACHINE_R3000 = $162; // MIPS little-endian, 0x160 big-endian
IMAGE_FILE_MACHINE_R4000 = $166; // MIPS little-endian
IMAGE_FILE_MACHINE_R10000 = $168; // MIPS little-endian
IMAGE_FILE_MACHINE_ALPHA = $184; // Alpha_AXP }
IMAGE_FILE_MACHINE_POWERPC = $1F0; // IBM PowerPC Little-Endian
var
Header: TImageDosHeader;
ImageNtHeaders: TImageNtHeaders;
begin
Strm.ReadBuffer(Header, SizeOf(Header));
if (Header.e_magic <> IMAGE_DOS_SIGNATURE) or
(Header._lfanew = 0) then
raise Exception.Create('Invalid executable');
Strm.Position := Header._lfanew;
Strm.ReadBuffer(ImageNtHeaders, SizeOf(ImageNtHeaders));
if ImageNtHeaders.Signature <> IMAGE_NT_SIGNATURE then
raise Exception.Create('Invalid executable');
Result := ImageNtHeaders.FileHeader.Machine <> IMAGE_FILE_MACHINE_I386;
end;
प्रतिक्रिया के लिए धन्यवाद। दुर्भाग्य से जेसीएल को काम करने की आवश्यकता होगी। मैंने अपने डेल्फी 2007 में जेसीएल नहीं जोड़ा है, लेकिन अगर यह एकमात्र लाभकारी समाधान की तरह दिखता है। – TheSteven
क्या? यह कोड किसी भी जेसीएल कक्षाओं और न ही दिनचर्या का उपयोग नहीं करता है। – Alex
आपका अपडेट किया गया संस्करण डेल्फी 2007 और डेल्फी 2010 में ठीक काम करता है। एक सुरुचिपूर्ण समाधान - धन्यवाद। – TheSteven
आप JCL से JclPeImage इस्तेमाल कर सकते हैं। निम्नलिखित ऐप दिखाता है कि इसे कैसे करें।
program Isx64ImageTest;
{$APPTYPE CONSOLE}
uses
SysUtils, JclWin32, JclPEImage;
var
PEImage: TJclPeImage;
begin
PEImage := TJclPeImage.Create;
try
//usage is "Isx64ImageTest filename"
PEImage.FileName := ParamStr(1);
//print the machine value as string
WriteLn(Format('Machine value of image %s is %s',
[PEImage.FileName, PEImage.HeaderValues[JclPeHeader_Machine]]));
//check for a special machine value
case PEImage.LoadedImage.FileHeader^.FileHeader.Machine of
IMAGE_FILE_MACHINE_I386: begin end;
IMAGE_FILE_MACHINE_AMD64: begin end;
else
begin
end;
end;
finally
PEImage.Free;
end;
end.
यदि आप जेसीएल का उपयोग कर रहे हैं - PeMapImgTarget फ़ंक्शन या PEImage.Target property (आपके उदाहरण में) का उपयोग करके - अधिक सरल दृष्टिकोण है। अपने आप से हेडर का विश्लेषण करने की आवश्यकता नहीं है। – Alex
अभी तक जेसीएल का उपयोग नहीं कर रहा है, अंततः ऐसा कर सकता है। मैं अपने डेल्फी2007 और डेल्फी -2010 घटकों को दर्पण करने की कोशिश कर रहा हूं क्योंकि मैं डेल्फी -2010 में माइग्रेट करने की योजना बना रहा हूं। क्या जेसीएल डेल्फी -2010 के लिए उपलब्ध है? – TheSteven
जेसीएल डी 2010 के लिए उपलब्ध है। – Alex
- 1. निर्धारित करें कि वर्तमान पावरशेल प्रक्रिया 32-बिट या 64-बिट है या नहीं?
- 2. पता लगाने के लिए कैसे है कि किसी भी पीई फ़ाइल (exe या dll) 64 बिट या 32 बिट
- 3. निर्धारित करें कि कोई निष्पादन योग्य (या लाइब्रेरी) 32 या 64 बिट
- 4. 64 बिट या 32 बिट ओएस
- 5. मैं कैसे निर्धारित करूं कि एक .NET अनुप्रयोग 32 या 64 बिट है या नहीं?
- 6. 64 या 64 बिट वर्चुअल मशीन 64 बिट मशीन (vmware)
- 7. यह निर्धारित करने के लिए कि कोई सिस्टम। डायग्नोस्टिक्स.प्रोसेस 32 या 64 बिट है या नहीं?
- 8. 32 बिट या 64 बिट एंड्रॉइड एसडीके?
- 9. 32-बिट या 64-बिट एप्लिकेशन?
- 10. पाइथन 64 बिट या 32 बिट
- 11. जेडीके 64 बिट या 32 बिट?
- 12. एकल 32 या 64 बिट सी # अनुप्रयोग
- 13. मशीन का आकार 64 या 32 बिट
- 14. मैं यह निर्धारित करने के लिए वीबीस्क्रिप्ट का उपयोग कैसे कर सकता हूं कि मैं 32-बिट या 64-बिट विंडोज ओएस चला रहा हूं या नहीं?
- 15. सी # का उपयोग करके, यह कैसे प्राप्त करें कि मेरी मशीन 64 बिट या 32 बिट है या नहीं?
- 16. यह जांचना कि फ़ाइल 32 बिट या 64 बिट है - विंडोज
- 17. 32 बिट और 64 बिट अप्रबंधित DLL
- 18. बैश स्क्रिप्ट - निर्धारित करें कि फ़ाइल संशोधित है या नहीं?
- 19. निर्धारित करें कि पूर्ण या संबंधित यूआरएल
- 20. अजगर - जाँच लें कि एक प्रणाली समारोह को चलाने या नहीं यह निर्धारित करने के 32 या 64 बिट है?
- 21. विभिन्न संरचना विशेषता 32 बिट या 64 बिट
- 22. आईफोन ओएस 64 बिट या 32 बिट है?
- 23. क्या मुझे पाइथन 32 बिट या पायथन 64 बिट
- 24. किसी ऑब्जेक्ट फ़ाइल का 64 बिट लिंकिंग
- 25. 32 बिट COM DLL को 64 बिट विंडोज 7
- 26. मेरा 32 बिट सिरदर्द अब 64 बिट माइग्रेन है?! (या 64 बिट .NET CLR रनटाइम समस्याएं)
- 27. कैसे पता लगाएं कि मेरा अमेज़ॅन ईसी 2 उदाहरण 32 बिट या 64 बिट है?
- 28. या तो या आवश्यक प्रमाणीकरण
- 29. क्या यह जांचने का कोई तरीका है कि प्रक्रिया 64 बिट या 32 बिट है या नहीं?
- 30. EXE या DLL
मैं निम्नलिखित जानकारी मिली है लेकिन यह आत्मसात करने के लिए समय नहीं था: http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.tools/ 2006-12/msg00011.html यह लिंक: http://www.delphidabbler.com/articles?article=8&part=2 पिछले जुड़ा हुआ लेख में वर्णित फ़ाइल शीर्षक है कि 16 की पहचान कर सकते हैं और पार्स करने के लिए डेल्फी स्रोत प्रदान करता है 32 बिट, लेकिन 64 नहीं। कोड डेल्फी 2007 पर चलाया जा सकता है, लेकिन डेल्फी -2010 या लाज़र पर नहीं - कम से कम बिना किसी संशोधन के मेरे पास समय या अनुभव था। – TheSteven