2012-08-13 63 views
5

進行比較我想製作一個指向在另一個進程的進程內存中包含特定值的位置的指針列表。該值可以是short,int,long,string,bool或其他。將字節[]與T

我的想法是爲此使用泛型。我有一個問題,如何告訴編譯器他需要轉換字節數組的類型?

這是我編:

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; 
    } 

我怎麼能告訴他需要的字節[]爲T類型轉換的編譯器?

+6

你的編譯器是「他」? :) – 2012-08-13 18:11:13

+6

@Ed奇數;當我問我的時候,它說:「我的名字是軍團,因爲我們很多」 – 2012-08-13 18:12:10

+2

至少有3個人(包括我自己)編輯了這篇文章,但我們沒有改變它=) – 2012-08-13 18:12:53

回答

2

你的問題是有點混亂,但我會盡力回答我可以

而不是採取一個泛型類型,我可能會寫需要一個接口的實例像IConvertableToByteArray或東西的方法。

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

然後,如果你需要允許某一特定類型是與該方法兼容,你可以做一個封裝類

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

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

你可以使用Marshal.StructureToPtr獲得結構的非託管表示(其中必須是一個「簡單」結構)。不過你可能需要特殊的字符串。

你還應該考慮一下你正在搜索的對齊約束 - 如果項目必須是4或8字節對齊,那麼一次讀取1個字節會非常緩慢和浪費。