में एक ही हस्ताक्षर किया है। कि ILDASM रिपोर्ट (जब हेक्स के रूप में दिखाया गया है) दोनों उन इस जैसे क्षेत्रोंविभिन्न प्रकार मैं एक क्षेत्र इस तरह कोल इंडिया में परिभाषित किया गया है सीआईएल
.field public int32 modopt(int16) fld
दोनों कैसे यह अब संभव है, अब मैं इसे करने के लिए बदलते हैं?
Field #1 (04000001)
-------------------------------------------------------
Field Name: fld (04000001)
Flags : [Public] (00000006)
CallCnvntn: [FIELD]
Field type: CMOD_OPT 1b000001 I4
Signature : 06 20 06 08
इस कोड को दोनों क्षेत्रों के लिए लग रहा है ठीक उसी (वास्तव में मैं सूचना हस्ताक्षर से मेल करने के लिए दूसरे क्षेत्र बना लिया है)। हस्ताक्षर स्पष्ट रूप से दूसरे क्षेत्र से मेल खाता है, लेकिन पहले क्षेत्र का हस्ताक्षर इस तरह दिखना चाहिए: 06 20 0f 01 08
! मुझे यहां क्या समझ नहीं आ रहा है?
संपादित करें:
सी # इस प्रकार की फेंकना नहीं कर सकते, कस्टम प्रकार संशोधक के लिए समर्थित नहीं सूचक और सरणी प्रकार के बारे में एक अपवाद फेंक, तो यह जाहिरा तौर पर हस्ताक्षर बेमेल हल करती है। लेकिन सवाल यह है कि क्यों ILDASM एक अवैध हस्ताक्षर बनाने की अनुमति देता है जो यह अवशेषों को कम नहीं कर सकता है।
# 2 संपादित करें:
यह ILASM वास्तव में सही आईएल पैदा कर रही है लगता है कि हेक्स डंप में एक फर्क है, मैं पिछली बार याद किया:
//the first assembly
TypeSpeC#1 (1b000001)
-------------------------------------------------------
TypeSpec : Ptr Void
Signature: 0f 01
//the second assembly
TypeSpeC#1 (1b000001)
-------------------------------------------------------
TypeSpec : I2
Signature: 06
तो वहाँ ILDASM हेक्स में सिर्फ एक बग है गलत सदस्य हस्ताक्षर की रिपोर्ट डंप करें (हालांकि मुझे आश्चर्य है कि गलत हस्ताक्षर में 06
कहां से आया था)।
स्पष्ट प्रश्न पूछने के लिए: आपको क्या लगता है कि यह '06 20 0f 01 08' होना चाहिए? क्या उसमें कोई ब्रेकडाउन/संदर्भ है? –
@Marc मैंने सीएलआई के ईसीएमए में देखा है। मॉडॉप्टी का तत्व प्रकार '20' है, पॉइंटर का तत्व प्रकार' 0f' है, शून्य के अनुसार यह '01' है। तो, इन सभी को एक साथ उठाना, 'मोडोपेट (शून्य *)' का हस्ताक्षर '20 0f 01' होना चाहिए (' 06' फ़ील्ड कॉलकॉन और '08' int32 है)। – IllidanS4
यह सी # है? मैं शून्य * देखता हूँ! – niceman