2016-09-11 161 views
-1

我有一些通過DLL播放WAV文件的代碼。它通過指向一個目錄路徑播放它,但我想將它包含在我的EXE中。所以,我把它作爲一種資源。問題是,我如何正確指向它?嵌入式資源的文件路徑?

UInt32 stream = BASS.BASS_StreamCreateFile(Properties.Resources.MYWAVFILE, 0, 0, BASSFlag.BASS_DEFAULT | BASSFlag.BASS_SAMPLE_LOOP); 

原始代碼有這樣的:

UInt32 stream = BASS.BASS_StreamCreateFile(@"C:\MYWAVFILE.WAV", 0, 0, BASSFlag.BASS_DEFAULT | BASSFlag.BASS_SAMPLE_LOOP); 

你可以看到第一個參數是我需要把它。

嚴重性代碼說明項目文件的線路抑制狀態 錯誤CS1503參數1:無法從「System.IO.UnmanagedMemoryStream」到「字符串」 MyProgramÇ轉換:\用戶\大笑貓\但是,編譯與此錯誤抱怨Documents \ Visual Studio 2015 \ Projects \ MyProgram \ MyProgram \ Form1.cs 30活動

謝謝。

回答

1

Properties.Resources.MYWAVFILE不是路徑字符串。這是存儲在內存中的文件的表示,因此它是System.IO.UnmanagedMemoryStream

找到一條重載函數,它在數據流而不是文件路徑中string形式或嵌入的資源複製到磁盤,並使用它:

using (var fileStream = File.Create("C:\\Path\\To\\File")) 
{ 
    Properties.Resources.MYWAVFILE.CopyTo(fileStream); 
} 
+0

我更願意將其包含在EXE本身。這可以做到嗎? – t0rxe

+0

我的解決方案將會正常工作,但是可能發生的情況是嵌入式資源將被加載到內存中,它將被保存在文件中(儘管已經加載到內存中),並且該函數將讀取文件路徑,將文件加載記憶,並做它的魔力。所以是的,找到一個更好的庫接受'Stream'會更好..嘗試['System.Media.SoundPlayer'](https://msdn.microsoft.com/en-us/library/system.media.soundplayer。 aspx)而不是使用'新的SoundPlayer(Properties.Resources.MYWAVFILE)' –