Open yumetodo opened 8 years ago
なんでUDL見つからないってなるんだろう、VSだと。Clang with Microsoft CodeGenだと通るんだけどなぁ
1>------ ビルド開始: プロジェクト:sound_play, 構成:Debug Win32 ------
1> main.cpp
1>c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(6): error C3688: リテラル サフィックス '_dB' が無効です。リテラル演算子またはリテラル演算子テンプレート 'operator ""_dB' が見つかりません
1>c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(6): error C2789: 'rate': const で修飾された型のオブジェクトは初期化する必要があります
1> c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(6): note: 'rate' の宣言を確認してください
1>c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(7): error C3688: リテラル サフィックス '_myrioB' が無効です。リテラル演算子またはリテラル演算子テンプレート 'operator ""_myrioB' が見つかりません
1>c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(7): error C2789: 'rate2': const で修飾された型のオブジェクトは初期化する必要があります
1> c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(7): note: 'rate2' の宣言を確認してください
1>c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(8): error C3536: 'rate': 初期化前に使用することはできません
1>c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(8): error C2672: 'dxle::sound_units::bel_cast': 一致するオーバーロードされた関数が見つかりませんでした。
1>c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(8): error C2784: 'To dxle::sound_units::bel_cast(const dxle::sound_units::bel_c<T,Period,nullptr> &)': テンプレート 引数を 'const dxle::sound_units::bel_c<T,Period,nullptr> &' に対して 'int' から減少できませんでした
1> c:\users\yumetodo\documents\git\dxlibex\dxlibex\basic_types\bel.hpp(24): note: 'dxle::sound_units::bel_cast' の宣言を確認してください
1>c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(8): error C2789: 'rate3': const で修飾された型のオブジェクトは初期化する必要があります
1> c:\users\yumetodo\documents\git\dxlibex\samples\sound_play\sound_play\main.cpp(8): note: 'rate3' の宣言を確認してください
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
どうやらIntelliSenseは__cpp_user_defined_literals
は定義されていると見なすが、コンパイラ先生は知らんと申しているようで。
ええい。
1>------ ビルド開始: プロジェクト:sound_play, 構成:Debug x64 ------
1> main.cpp
1>d:\user\documents\git\dxlibex\dxlibex\helper.h(138): error C2440: 'reinterpret_cast': 'int' から 'int' に変換できません。
1> d:\user\documents\git\dxlibex\dxlibex\helper.h(138): note: 変換は有効な標準変換で、暗黙的にまたは static_cast、C スタイル キャストまたは関数スタイルのキャストによって行われます。
1> d:\user\documents\git\dxlibex\dxlibex\helper.h(188): note: コンパイル対象のクラス テンプレート インスタンス化 'dxle::impl::Unique_HandledObject_Bace<Child,is_dxlib_handle,HandleType,invalid_handle_value>' のリファレンスを確認してください
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
なんじゃそれ。こんなバグが有るとは・・・。 https://connect.microsoft.com/VisualStudio/feedback/details/2692140 バグレポ投げました。
さてどうしよう。
1>------ ビルド開始: プロジェクト:sound_play, 構成:Debug x64 ------
1> main.cpp
1>d:\user\documents\git\dxlibex\dxlibex\helper.h(181): error C2440: 'static_cast': 'dxle::impl::Unique_HandledObject_Bace<Child,true,int,-1> *const ' から 'dxle::win32api::file_handle *' に変換できません。
1> with
1> [
1> Child=dxle::win32api::file_handle
1> ]
1> d:\user\documents\git\dxlibex\dxlibex\helper.h(181): note: 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1> d:\user\documents\git\dxlibex\dxlibex\helper.h(179): note: クラス テンプレート のメンバー関数 'dxle::impl::Unique_HandledObject_Bace<Child,true,int,-1>::~Unique_HandledObject_Bace(void) noexcept' のコンパイル中
1> with
1> [
1> Child=dxle::win32api::file_handle
1> ]
1> d:\user\documents\git\dxlibex\dxlibex\win32api_wrap\file_system\file_system.hpp(121): note: コンパイル対象のクラス テンプレート インスタンス化 'dxle::impl::Unique_HandledObject_Bace<Child,true,int,-1>' のリファレンスを確認してください
1> with
1> [
1> Child=dxle::win32api::file_handle
1> ]
1>d:\user\documents\git\dxlibex\dxlibex\helper.h(181): error C2227: '->delete_this' : 左側がクラス、構造体、共用体、ジェネリック型へのポインターではありません。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
@Nagarei すみません、これなにが原因か分かりますか?ちょっとお手上げで・・・。
@yumetodo デバッグの前に。filesystem系ですが、DXArchiveが考慮されていないように思います。(もっと早く確認すれば良かったです。申し訳ない。)
あ~、んなのもあったなぁ・・・。
で、DxLibのヘッダーやらソースやら覗きましたが、かなり厄介だな・・・。というのはまともにDXA扱う関数がほとんど公開されていない。ライセンス的に作者さんに公開をお願いするか一からコード書くかしないといけない。後者の場合はDxLibExの利用にコンパイルが必要になる。
とりあえず今回の場合はLoadSoundMem
/LoadBGM
の呼び分け、つまり内部でのDX_SOUNDDATATYPE_MEMNOPRESS
/DX_SOUNDDATATYPE_MEMPRESS
/DX_SOUNDDATATYPE_FILE
の場合分けの自動判別だから、DXAのパスが指定された時は例外が飛んで、catchされてsound_data_type::big
になるだけだからまあそれでいいかなと思います。速度的にはDXAの場合内部的にどのフラグに行こうと、データはメモリー上にあるので大差ないはずですし。
しっかし、DXAかぁ・・・。あんなもん何がいいんだか・・・。その気になれば誰でも中身入れ替えられるんだから、圧縮解凍する分重くなるだけでは?と思ってしまう。共通鍵暗号化機能もあるけど鍵を毎回SSL通信で落としてくるとかしないとその気になれば割れるし・・・(そうすればメモリーダンプとかいう死ぬほど面倒な作業をしないと割れないからやっと意味があるものになる)。
ん?どういうことだ?Clang with Microsoft CodeGenはこの件に関してなにも言ってこないぞ・・・
static_assertの結果がコンパイルエラーのメッセージと矛盾しているんですがこれは一体
'dxle::impl::Unique_HandledObject_Bace<Child,true,int,-1> const ' から 'dxle::win32api::file_handle ' に変換できません。
このconstどっから来た
あああ、もう怒った。全然コンパイル通らないし。 http://qiita.com/yumetodo/items/3513677a4b8942763886 p0052r2のscopre_exist実装してやる!
まあ https://groups.google.com/a/isocpp.org/forum/#!msg/std-proposals/b74TFYOWRB8/A5Qo5fpKBAAJ でも上がっているように登録する関数がエラーの時の処理が書けないというなんかアレな仕様だけどどうせ今でも戻り値なんて見てないし。
うーん、テストコード書くのに夢中でこれみたいなコア機能の実装が遅々として進まない・・・。 とりあえずconflictは解消しておくか・・・
conflictは解消したけど、DXAどうしよう・・・。ちょっとAPIとにらめっこする必要があるな・・・。
http://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=view&no=4005 なるほど、サウンドのフェード処理か・・・
std::wcin
/ std::wcout
をUTF-8としてバイパスする目的で書いたstreambuf
https://github.com/yumetodo/utf8_streambuf
を実装した経験がある今ならDxLibのFileAPIのラップが書けるかもしれない・・・
GetVolumeSoundMemについて http://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=view&no=4195
サウンド系クラスを作る
42