2012-08-13 17 views
5

तुलना करें मैं उन स्थानों पर पॉइंटर्स की एक सूची बनाना चाहता हूं जिनमें किसी अन्य प्रक्रिया की प्रक्रिया स्मृति में एक निश्चित मान शामिल है। मान एक छोटा, int, लंबा, स्ट्रिंग, बूल या कुछ और हो सकता है।बाइट [] से टी

मेरा विचार जेनरिक्स का उपयोग करना है। मुझे इसे बनाने में एक समस्या है, मैं कंपाइलर को कैसे बता सकता हूं कि उसे बाइट सरणी को बदलने के लिए किस प्रकार की आवश्यकता है?

यह है कि मैं क्या कर दिया है:

public List<IntPtr> ScanProccessFor<T>(T ItemToScanFor) 
    { 
     List<IntPtr> Output = new List<IntPtr>(); 

     IntPtr StartOffset = SelectedProcess.MainModule.BaseAddress; 
     int ScanSize = SelectedProcess.MainModule.ModuleMemorySize; 

     for (int i = 0; i < ScanSize; i++) 
      if (ReadMemory(SelectedProcess, StartOffset + i, (UInt16)Marshal.SizeOf(ItemToScanFor)) == ItemToScanFor) 
       Output.Insert(Output.Count,StartOffset + i); 

     return Output; 
    } 

मैं संकलक वह की जरूरत है कि बाइट [टाइप करने के लिए टी] कन्वर्ट करने के लिए कैसे बता सकते हैं?

+6

आपका कंपाइलर "वह" है? :) –

+6

@ एडी विषम; जब मैं अपनी पूछता हूं, तो यह कहता है, "मेरा नाम सेना है, क्योंकि हम कई हैं" –

+2

कम से कम 3 लोग (स्वयं शामिल) ने पोस्ट संपादित किया और हमने इसे नहीं बदला =) –

उत्तर

2

आपका प्रश्न थोड़ा भ्रामक है, लेकिन मुझे लगता है कि मैं क्या

इसके बजाय एक सामान्य प्रकार लेने के

, मैं शायद एक विधि है कि IConvertableToByteArray या कुछ और की तरह एक अंतरफलक का एक उदाहरण लेता लिखते थे सकता है जवाब देने की कोशिश करेंगे ।

public IConvertableToByteArray 
{  
    public byte[] ToByteArray(); 
} 

तब यदि आप एक विशिष्ट प्रकार है कि विधि के साथ संगत होना करने की अनुमति की जरूरत है, तो आप एक encapsulating वर्ग

public IntConvertableToByteArray : IConvertableToByteArray 
{ 
    public int Value{get; set;} 

    public byte[] ToByteArray() 
    { 
     insert logic here 
    } 
} 
1

आप Marshal.StructureToPtr का उपयोग संरचना का एक अप्रबंधित प्रतिनिधित्व प्राप्त करने के लिए कर सकता है कर सकता है (जो एक 'सरल' संरचना होना चाहिए)। हालांकि आपको विशेष केस स्ट्रिंग की आवश्यकता हो सकती है।

आपको जो भी खोज रहे हैं उस पर संरेखण बाधाओं के बारे में भी सोचना चाहिए - एक समय में मेमोरी 1 बाइट के माध्यम से आगे बढ़ना बहुत धीमा और अपमानजनक होगा यदि आइटम 4 या 8 बाइट गठबंधन होना चाहिए।

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