2011-04-13 92 views
1

我試圖將C代碼轉換爲開源項目(ispy)的C#代碼: http://wiki.videolan.org/Stream_to_memory_(smem)_tutorial將C轉換爲C#(使用smem的libvlc方法)

我當時的主要問題是轉換方法簽名:

void handleStream(void* p_audio_data, uint8_t* p_pcm_buffer, unsigned int channels, unsigned int rate, unsigned int nb_samples, unsigned int bits_per_sample, unsigned int size, int64_t pts)

成C#等效。有任何想法嗎?

+1

這是一個* *回調,這意味着C代碼必須稱之爲。你將如何實現這取決於其餘代碼如何工作。 – Gabe 2011-04-13 04:42:15

回答

0

如果這是一個回調,我想使它成爲一個C#delegate

public delegate void handleStream (byte[] p_audio_data, uint[] p_pcm_buffer, 
            uint channels, uint rate, uint nb_samples, 
            uint bits_per_sample, uint size, ulong pts); 
+0

目前尚不清楚這將如何工作。互操作代碼如何知道這些數組有多大? – Gabe 2011-04-13 05:17:06

+0

不起作用 - 我很確定void * p_audio_data應該轉換爲IntPtr p_audio_data,而不是byte [](因爲它是一個指針)。 也有另一種方法: 無效prepareRender(void *的p_audio_data,uint8_t ** pp_pcm_buffer,unsigned int的大小) ,我翻譯到C# - 我認爲uint8_t轉化爲byte [],但不知道如何處理** - 是一個指針指針?我的c很生鏽...... – Sean 2011-04-13 12:14:54

+0

@Sean,'byte []'*是一個指針,它指向一個數組。 'uint8_t'是C#中的'byte'。 @加貝,你有樣本數量,速率(樣本/秒/通道)和通道數量,所以你知道音頻數據應該有多大。如果有的話,你有*太多的信息。 – Blindy 2011-04-13 16:45:50

0

有一個在http://sourceforge.net/projects/libvlcnet/一個.NET包裝爲libvlc,你應該使用,並讓它處理P的細節/調用。

+0

使用預寫封裝是一個好主意,但是你知道OP的任務實際上是由該庫處理的嗎? – Gabe 2011-04-13 05:28:00

+1

它沒有 - 而且是的,我使用nVLC包裝庫,不做到這一點無論:( – Sean 2011-04-13 11:22:13

+0

@Sean:你要發佈的回調應該如何描述(或它的鏈接)爲了工作,爲我們找出它的正確聲明 – Gabe 2011-04-13 12:06:06

0

也有Vlc.DotNet

該項目具有Vlc.DotNet.Core.Interops庫,用於VLC的所有版本提供VLC互操作性展示> = 1.1