Como obter o filepath de arquivos adicionados ao Windows Mobile app?
-
22-08-2019 - |
Pergunta
Eu adicionei um arquivo WAV para meu aplicativo Windows Mobile e eu quero usar MobilePlaySound em Coredll.dll para jogá-lo.
O nome do arquivo é um dos seus parâmetros:
MobilePlaySound(fileName, IntPtr.Zero, (int)(Flags.SND_ASYNC | Flags.SND_FILENAME));
I criar uma nova pasta 'sound', adicione 'start.wav' para o projeto e defina a propriedade 'Build Action' para 'recursos incorporados'.
Então eu definir o filename:
fileName = "\\Program Files\\myApp\\sound\\start.wav";
Mas o som não é reproduzido em tudo. Qual é a filePath correta, então?
Solução
Ao definir a ação de compilação de "Embedded Resource" o arquivo será compilado no seu conjunto como um recurso. Isso significa que o arquivo WAV será incorporado em seu arquivo .exe ou .dll, e não aparecerão no sistema de arquivos. Devido a isso, você não pode passar um nome para o wav a algum método que precisa dele.
Existem duas maneiras de resolver isso: se você realmente quer ter o arquivo wav como um resouce embutido, você vai precisar para extrair o recurso e gravá-lo em um arquivo no sistema de arquivos em tempo de execução. Você pode, em seguida, passar o nome do arquivo para o método MobilePlaySound. Eu pessoalmente não escolheria esta solução neste caso.
A outra solução é a não incorporar o arquivo wav como um recurso, mas deixá-lo viver como seu próprio arquivo no sistema de arquivos. Para isso, definir a ação de compilação de "Conteúdo" e definir o "Copy to Output Directory" definindo a qualquer "Copiar sempre" ou "Copy if newer". Isso fará com que o compilador incluir o arquivo na saída. Neste caso, a sua suposição sobre onde o arquivo deve ser é correta.
Em resumo:
- ação de compilação = "Content"
- Copiar para Output Directory = "Copiar sempre" ou "Copy if newer"