ページ 11

DirectSound関係でコンパイルエラーになってしまいます

Posted: 2011年3月20日(日) 13:20
by dic
DirectX 9 SDK で作成しています
DirectDraw, DirectInput はうまくできたのですが
DirectSoundを追加するとコンパイルエラーがおきてしまいます
#include "xx" の関係と思うのですが、何がいけないのかがわかりません

DirectX9 SDK sample に付属している DxUTsound.cpp DXUTsound.h を再利用しようと
しているのですが、これをプロジェクトに追加すると以下のエラーがでます


C:\PROGRAM FILES\MICROSOFT DIRECTX 9.0 SDK (SUMMER 2004)\INCLUDE\dsound.h(305) : error C2146: 構文エラー : ';' が、識別子 'dwReserved1' の前に必要です。
C:\PROGRAM FILES\MICROSOFT DIRECTX 9.0 SDK (SUMMER 2004)\INCLUDE\dsound.h(305) : error C2501: 'DWORD_PTR' : 識別名を宣言するのに、型が指定されていません。
C:\PROGRAM FILES\MICROSOFT DIRECTX 9.0 SDK (SUMMER 2004)\INCLUDE\dsound.h(305) : error C2501: 'dwReserved1' : 識別名を宣言するのに、型が指定されていません。
C:\PROGRAM FILES\MICROSOFT DIRECTX 9.0 SDK (SUMMER 2004)\INCLUDE\dsound.h(306) : error C2146: 構文エラー : ';' が、識別子 'dwReserved2' の前に必要です。
C:\PROGRAM FILES\MICROSOFT DIRECTX 9.0 SDK (SUMMER 2004)\INCLUDE\dsound.h(306) : error C2501: 'DWORD_PTR' : 識別名を宣言するのに、型が指定されていません。
C:\PROGRAM FILES\MICROSOFT DIRECTX 9.0 SDK (SUMMER 2004)\INCLUDE\dsound.h(306) : error C2501: 'dwReserved2' : 識別名を宣言するのに、型が指定されていません。
DXUTsound.cpp
NOTE: WINVER has been defined as 0x0500 or greater which enables
Windows NT 5.0 and Windows 98 features. When these headers were released,
Windows NT 5.0 beta 1 and Windows 98 beta 2.1 were the current versions.
For this release when WINVER is defined as 0x0500 or greater, you can only
build beta or test applications. To build a retail application,
set WINVER to 0x0400 or visit http://www.microsoft.com/msdn/sdk
to see if retail Windows NT 5.0 or Windows 98 headers are available.
See the SDK release notes for more information.
C:\PROGRAM FILES\MICROSOFT DIRECTX 9.0 SDK (SUMMER 2004)\INCLUDE\dsound.h(305) : error C2146: 構文エラー : ';' が、識別子 'dwReserved1' の前に必要です。
C:\PROGRAM FILES\MICROSOFT DIRECTX 9.0 SDK (SUMMER 2004)\INCLUDE\dsound.h(305) : error C2501: 'DWORD_PTR' : 識別名を宣言するのに、型が指定されていません。
C:\PROGRAM FILES\MICROSOFT DIRECTX 9.0 SDK (SUMMER 2004)\INCLUDE\dsound.h(305) : error C2501: 'dwReserved1' : 識別名を宣言するのに、型が指定されていません。
C:\PROGRAM FILES\MICROSOFT DIRECTX 9.0 SDK (SUMMER 2004)\INCLUDE\dsound.h(306) : error C2146: 構文エラー : ';' が、識別子 'dwReserved2' の前に必要です。
C:\PROGRAM FILES\MICROSOFT DIRECTX 9.0 SDK (SUMMER 2004)\INCLUDE\dsound.h(306) : error C2501: 'DWORD_PTR' : 識別名を宣言するのに、型が指定されていません。
C:\PROGRAM FILES\MICROSOFT DIRECTX 9.0 SDK (SUMMER 2004)\INCLUDE\dsound.h(306) : error C2501: 'dwReserved2' : 識別名を宣言するのに、型が指定されていません。
C:\Documents and Settings\ーーーーーーーーーO6X1\デスクトップ\dll\DXUT.h(13) : fatal error C1189: #error : "The sample framework requires a Unicode build. If you are using Microsoft Visual C++ .NET, under the General tab of the project properties ch
ange the Character Set to 'Use Unicode Character Set'."
cl.exe の実行エラー


どのように対処すればいいでしょうか?

Re: DirectSound関係でコンパイルエラーになってしまいます

Posted: 2011年3月20日(日) 15:21
by 海Sea
こんにちは。
DxUTsound.cpp DXUTsound.hをプロジェクトに追加したとのことですが、
これらのファイルは、ソースを見る限りDirectSundを扱うためのものではありません。
プロジェクトから外してください。

記述するファイルは新規でとりあえずcppでも良いので作成してください。
例えサンプルがあってもそのままプロジェクトに追加することは
避けたほうが良いです。

まずダイレクトサウンドを扱うには、
#include <Dsound.h>
#pragma comment(lib, "dsound.lib")

最低限この二つが必要です。
そしてダイレクトサウンドを扱うコードを書かなければなりません。
あとは、掲示板で説明するとやたらと長くなり、そして意味不明になると思うので、
ここでは割愛します。すいません。

Re: DirectSound関係でコンパイルエラーになってしまいます

Posted: 2011年3月20日(日) 16:14
by dic
>>海Sea さん
>>ソースを見る限りDirectSundを扱うためのものではありません。
ここがちょっとよくわからないのですが

補足でどこがエラー箇所になっているかというと
SDK内のinclude\\dsound.h の途中のところでコンパイルエラーになっています
下の DWROD_PTR が未定義の状態になっているようです
内部のコンパイル関係なので手が出ない状態です

dsound.h 内

コード:

#if DIRECTSOUND_VERSION >= 0x0800

    typedef struct _DSEFFECTDESC
    {
        DWORD       dwSize;
        DWORD       dwFlags;
        GUID        guidDSFXClass;
        DWORD_PTR   dwReserved1;
        DWORD_PTR   dwReserved2;
    } DSEFFECTDESC, *LPDSEFFECTDESC;
    typedef const DSEFFECTDESC *LPCDSEFFECTDESC;

    #define DSFX_LOCHARDWARE    0x00000001
    #define DSFX_LOCSOFTWARE    0x00000002

Re: DirectSound関係でコンパイルエラーになってしまいます

Posted: 2011年3月20日(日) 16:40
by 海Sea
ちょっと気になってたのでソースを見てたんですが、
こちらの勘違いだったようです。申し訳ありません。

どうやらこれはDirecxのバージョン違いを確認する記述もたくさん
含まれているのかなと思われます。

問題の DWORD_PTRなんですが
これはWinAPIに関する型ですよね。

DWORD_PTRが検索してどのソースにも定義されていないのであれば
自分でその型を定義するか、platformsdkをインストールしないと駄目みたいです。
plfatformsdkに関してはよく知らないので何とも言えません。

ちなみに自分で型を作成することは
http://ameblo.jp/ganbaru-engineer/theme ... 98085.html
こちらでやっている方がいました。
ただし情報源がとても古いです。


私はこのエラーが出なかったのですが、こういうエラーもあるんですね。

Re: DirectSound関係でコンパイルエラーになってしまいます

Posted: 2011年3月20日(日) 17:04
by dic

コード:

typedef	DWORD*	DWORD_PTR
#include	"dxsound.h"
#include	"DxUTsound.h"
とやってみたところ別のところでコンパイルエラーがでました
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\float.h(29) : error C2144: 構文エラー : ';' が型 'int' の前に必要です。
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\float.h(29) : fatal error C1004: 予期せぬ EOF が検出されました。

コード:

#ifdef  __cplusplus
extern "C" {
#endif
なおかつ前の未定義状態になっているようです

これは・・・dllを2個作ったほうが早いかな

Re: DirectSound関係でコンパイルエラーになってしまいます

Posted: 2011年3月20日(日) 17:56
by ISLe
VC6なんですね。

#define DWORD_PTR DWORD
じゃないといけないのではないでしょうか。
それでダメなら
#define DIRECTSOUND_VERSION 0x0700
としてDirectSound 7以前の機能だけで我慢するしかないでしょう。
VC6の頃はそれしか無かったわけですし。

Re: DirectSound関係でコンパイルエラーになってしまいます

Posted: 2011年3月20日(日) 18:18
by 海Sea
エラーが出ずっぱり・・・(^^;
ちょっとこのサンプルはこれ以上私にはわかりませんね
ただ単純にDirecSoundはWaveファイルしか鳴らせないので、
サンプルがなぜこんなに複雑なのかが謎です。

Re: DirectSound関係でコンパイルエラーになってしまいます

Posted: 2011年3月20日(日) 18:34
by ひよこ
DXUT自体DirectXを扱うフレームワークだからでしょう、そのおかげで読みづらいんだと思います。
一番簡単な方法はincludeされているファイルを片っ端から読み込むことです。

Re: DirectSound関係でコンパイルエラーになってしまいます

Posted: 2011年3月20日(日) 18:51
by dic
>>ISLeさん
#define DWORD_PTR DWORD
じゃないといけないのではないでしょうか。
それでダメなら
#define DIRECTSOUND_VERSION 0x0700
としても同じコンパイルエラーがでてしまいました
DirectX7 SDK の入手はネットではできないようで・・・
SDK5 ならCD-ROMがあるのでこちらを参照します

>>海Seaさん
そうですね
私だけの環境かもしれないですね

>>ひよこさん
読んでみて、いろいろ削ってみたのですが
もう一度見てみます

Re: DirectSound関係でコンパイルエラーになってしまいます

Posted: 2011年3月20日(日) 22:34
by dic
いろいろやってて、参考になりそうなサンプルがあったので
それを参考にさせていただいて、解決しました

ちょっと特殊な形になりましたが下の定義を追加することで私の環境でもコンパイルできるようになりました

コード:

#ifndef	DIC_DEF
#define	DIC_DEF
typedef	DWORD*	DWORD_PTR;
typedef	unsigned int UINT;
#endif//DIC_DEF