2012-03-17 53 views
0

以下一些樣品我看到這個網站我嘗試下面的代碼:怎樣的byte []轉換成IMediaSample在C#

var byteArray = new byte[m.Length -10]; 
myMemoryStream.Position = 10; 
myMemoryStream.Read(byteArray,0,(int)myMemoryStream.Length-10); 

GCHandle pinnedArray = GCHandle.Alloc(byteArray, GCHandleType.Pinned); 
IntPtr pointer = pinnedArray.AddrOfPinnedObject(); 

IMediaSample pSample = null; 

Marshal.PtrToStructure(pointer,pSample); 

pinnedArray.Free(); 

但是我收到一個「NullArgumentException」呼叫Marshal.PtrToStructure(指針,pSample時)。

當然,我知道這個錯誤的原因,我想知道的是正確的做法。

如果你需要更多的信息告訴我,我會盡快添加它。

請幫忙。

+0

是的,這是不可避免的,當你爲累得PtrToStructure第二個參數(傳遞null)。它需要是一個Type或一個非null對象,以便Marshal類可以調用object.GetType()。該代碼段無法幫助您猜測您打算如何使用IMediaSample界面。您可以自己實現它,也可以使用庫存CMediaSample實現。沒有任何場景可以從一個字節中創建一個實例。 – 2012-03-17 21:33:49

+0

你能提供一個使用CMediaSample的例子嗎?因爲我不知道你的意思,我剛從一週前開始使用這種語言,所以無知在各方面都很廣泛。 – Martin 2012-03-17 21:50:55

回答

0

您需要創建實際結構,該結構也實現了IMediaSample接口。

public struct IMediaSampleStructure : IMediaSample 
{ 
    // Implementation. 
} 

然後,你可以做這樣的事情:

IMediaSample pSample = new IMediaSampleStructure(); 
Marshal.PtrToStructure(pointer, (IMediaSampleStructure)pSample);