C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: リソースファイルの埋め込みつきまして


(過去ログ 126 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■75244 / inTopicNo.1)  リソースファイルの埋め込みつきまして
  
□投稿者/ ハル (1回)-(2015/03/08(Sun) 19:26:40)

分類:[VB6 以前] 

お世話になります。

wmvファイルをexeに埋め込みは、VB6に付属していますサンプルプログラム(VB98\ATM)を参考にしました。

概要
Command1_Clickでの音声ファイルは問題なく再生されました。
Command2_ClickではWindows Media Playerで「準備完了」と表示され、再生できません。
仮にForm1.WindowsMediaPlayer1.URL = "C:\Documents and Settings\12345\デスクトップ\test.wmv"
にしますと問題なく再生できます。

質問
Windows Media Playerで「準備完了」と表示され、再生できない原因につきまして
ご教示願えますと幸いであります。

'
'''''''''''''''''''''''''''''''''''''''''''''''''
' サンプルプログラムを参考
'''''''''''''''''''''''''''''''''''''''''''''''''
'
Option Explicit

Private Sub Command1_Click()
SoundBuffer = LoadResData(101, "CUSTOM")'●音声ファイル
sndPlaySound SoundBuffer(0), SND_ASYNC Or SND_NODEFAULT Or SND_MEMORY
End Sub

Private Sub Command2_Click()
SoundBuffer = LoadResData(102, "CUSTOM")
Form1.WindowsMediaPlayer1.URL = SoundBuffer(0) & ".wmv"'●動画ファイルが「準備完了」と表示され再生できません。
'Form1.WindowsMediaPlayer1.URL = "C:\Documents and Settings\12345\デスクトップ\test.wmv"'●仮では問題なく再生できます。

End Sub


'''''''''''''''''''''
'標準モジユール
'''''''''''''''''''''
' サウンド サポート API 関数  
Declare Function sndPlaySound Lib "WINMM.DLL" Alias "sndPlaySoundA" _
(lpszSoundName As Any, ByVal uFlags As Long) As Long

Global Const SND_ASYNC = &H1 ' 非同期再生
Global Const SND_NODEFAULT = &H2 ' 既定のサウンド非使用
Global Const SND_MEMORY = &H4 ' lpszSoundName でメモリ ファイルを参照します。

Global SoundBuffer() As Byte

'''''''''''''''''''''''
'関連ドキュメント
'''''''''''''''''''''''
Project1.RES
'
'''''''''''''''''''''''''''''''''''''''''''''''''
'
'''''''''''''''''''''''''''''''''''''''''''''''''



引用返信 編集キー/
■75247 / inTopicNo.2)  Re[1]: リソースファイルの埋め込みつきまして
□投稿者/ Azulean (449回)-(2015/03/08(Sun) 21:42:17)
No75244 (ハル さん) に返信
> 質問
> Windows Media Playerで「準備完了」と表示され、再生できない原因につきまして
> ご教示願えますと幸いであります。

古いドキュメントですが、sndPlaySound の説明を読んでみましょう。
https://msdn.microsoft.com/ja-jp/library/cc428790.aspx

第1引数について、こう書かれています。
「fdwSoundパラメータでSND_MEMORYを指定したときは、メモリ内に読み込まれたサウンドイメージへのポインタを指定します。」

あなたのコードでは SND_MEMORY を指定しているので、LoadResData の戻り値は「サウンドイメージ」であると解釈できるでしょう。


対して、Command2_Click で代入対象となっているプロパティ URL は「文字列」です。
要求されているのは「サウンドイメージ」ではありませんので、指定できないわけです。

さて、ここからどうするかですが、一度、一時ファイルに書き込んでそれを読み込ませるのが楽かもしれません。

引用返信 編集キー/
■75252 / inTopicNo.3)  Re[2]: リソースファイルの埋め込みつきまして
□投稿者/ ハル (2回)-(2015/03/09(Mon) 08:38:02)
Azulean さん

返答をして頂きましてありがとうございました。

> 古いドキュメントですが、sndPlaySound の説明を読んでみましょう。
> https://msdn.microsoft.com/ja-jp/library/cc428790.aspx
>fdwSoundパラメータでSND_MEMORYを指定したときは、メモリ内に読み込まれたサウンドイメージへのポインタを指定します。
>Command2_Click で代入対象となっているプロパティ URL は「文字列」です。
>要求されているのは「サウンドイメージ」ではありませんので、指定できないわけです。
お陰様で何をやれば良いのか少し分って来たような気がし間違いの原因が分りました。感謝申し上げます。

下記のwebページに埋め込み動画についてメモリ上から再生方法がありました。
(mmioOpen APIについて調べてみてください)
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=15560

まだ、良く分っていませんがmmioOpen MovieBuffer(0), ・・・・・・・・・・?など色々と試してみたいと思います。

'''''''''''''''''''''
'標準モジユールに追加
'''''''''''''''''''''
' サウンド サポート API 関数  
Declare Function mmioOpen Lib "winmm.dll" Alias "mmioOpenA" (ByVal szFileName As String, _
lpmmioinfo As Long, ByVal dwOpenFlags As Long) As Long
Global MovieBuffer() As Byte

Private Sub Command2_Click()
MovieBuffer = LoadResData(102, "CUSTOM")
mmioOpen MovieBuffer(0), ・・・・・・・・・・?
End Sub


引用返信 編集キー/
■75301 / inTopicNo.4)  Re[3]: リソースファイルの埋め込みつきまして
□投稿者/ ハル (3回)-(2015/03/11(Wed) 15:10:20)
追記分

>さて、ここからどうするかですが、一度、一時ファイルに書き込んでそれを読み込ませるのが楽かもしれません。

ご指摘されました一時ファイルについてのwebページがありました。
http://www3.plala.or.jp/sardonyx/smart/vb/code/2.html#L3
リソースファイルでは、文字列,ビットマップ,アイコンやカーソルしかサポートされていません。
リソースファイルでサポートされていないタイプのファイルを扱うには一時的なファイルを作成し、
バイナリデータを保存して、ファイルとして読みます。

以上のことから動画ファイルはサポート外であることが分かりました。
また、リソースファイル以外につきましての一時ファイルについてもサンプルで解説されていました。
動画ファイルにつきましては原因が分りましたので一応解決とさせてもらいました。
大変、お世話になりました。ありがとうございました。



解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -