2016-09-11 61 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)' –