2016-12-17 10 views
1

私はJonathan S. Harbourの "Beginning Game Programming Third Edition"を読んでおり、Direct Soundの使い方を教えてくれました。本書ではDirectX SDKの以前のリリースにあったDirectSound.hとDirectSound.cppファイルを使用していますが、コンパイルしようとすると "LNK2019:未解決の外部シンボル"エラーが発生します。エラーLNK2019:未解決の外部記号Direct Sound

1> DirectSound.obj:エラーLNK2019:未解決の外部シンボル _DXTraceA機能で参照20 @? "パブリック:長いthiscall CSoundManager ::初期化(構造体HWND *、unsigned long型)" (初期化し@ CSoundManager @@ QAEJPAUHWND __ @@ K @ Z)

1> DirectSound.obj:エラーLNK2019:長いthiscall CSoundManager ::初期化(構造体HWND *、符号なし: _DirectSoundCreate8機能で参照12 @」公共の未解決の外部シンボルlong) " (?Initialize @ CSoundManager @@ QAEJPAUHWND __ @@ K @ Z)

私は自分のプロジェクトにDirect Soundのコードを実装していません。これらのファイルが存在するだけで、プロジェクトはコンパイルされません。それらがなければ、プロジェクトは完全にコンパイルされ実行されます。

#ifndef DSUTIL_H 
#define DSUTIL_H 

#include <windows.h> 
#include <mmsystem.h> 
#include <mmreg.h> 
#include <dsound.h> 

class CSoundManager; 
class CSound; 
class CStreamingSound; 
class CWaveFile; 

#define WAVEFILE_READ 1 
#define WAVEFILE_WRITE 2 

#define DSUtil_StopSound(s)   { if(s) s->Stop(); } 
#define DSUtil_PlaySound(s)   { if(s) s->Play(0, 0); } 
#define DSUtil_PlaySoundLooping(s) { if(s) s->Play(0, DSBPLAY_LOOPING); } 


//----------------------------------------------------------------------------- 
// Name: class CSoundManager 
// Desc: 
//----------------------------------------------------------------------------- 
class CSoundManager 
{ 
protected: 
    LPDIRECTSOUND8 m_pDS; 

public: 
    CSoundManager(); 
    ~CSoundManager(); 

    HRESULT Initialize(HWND hWnd, DWORD dwCoopLevel); 
    inline LPDIRECTSOUND8 GetDirectSound() { return m_pDS; } 
    HRESULT SetPrimaryBufferFormat(DWORD dwPrimaryChannels, DWORD dwPrimaryFreq, DWORD dwPrimaryBitRate); 

    HRESULT Create(CSound** ppSound, LPTSTR strWaveFileName, DWORD dwCreationFlags = 0, GUID guid3DAlgorithm = GUID_NULL, DWORD dwNumBuffers = 1); 
}; 




//----------------------------------------------------------------------------- 
// Name: class CSound 
// Desc: Encapsulates functionality of a DirectSound buffer. 
//----------------------------------------------------------------------------- 
class CSound 
{ 
protected: 
    LPDIRECTSOUNDBUFFER* m_apDSBuffer; 
    DWORD    m_dwDSBufferSize; 
    CWaveFile*   m_pWaveFile; 
    DWORD    m_dwNumBuffers; 
    DWORD    m_dwCreationFlags; 

    HRESULT RestoreBuffer(LPDIRECTSOUNDBUFFER pDSB, BOOL* pbWasRestored); 

public: 
    CSound(LPDIRECTSOUNDBUFFER* apDSBuffer, DWORD dwDSBufferSize, DWORD dwNumBuffers, CWaveFile* pWaveFile, DWORD dwCreationFlags); 
    virtual ~CSound(); 

    HRESULT FillBufferWithSound(LPDIRECTSOUNDBUFFER pDSB, BOOL bRepeatWavIfBufferLarger); 
    LPDIRECTSOUNDBUFFER GetFreeBuffer(); 

    HRESULT Play(DWORD dwPriority = 0, DWORD dwFlags = 0, LONG lVolume = 0, LONG lFrequency = -1, LONG lPan = 0); 
    HRESULT Stop(); 
    HRESULT Reset(); 
    BOOL IsSoundPlaying(); 
}; 


//----------------------------------------------------------------------------- 
// Name: class CWaveFile 
// Desc: Encapsulates reading or writing sound data to or from a wave file 
//----------------------------------------------------------------------------- 
class CWaveFile 
{ 
public: 
    WAVEFORMATEX* m_pwfx;  // Pointer to WAVEFORMATEX structure 
    HMMIO   m_hmmio;  // MM I/O handle for the WAVE 
    MMCKINFO  m_ck;   // Multimedia RIFF chunk 
    MMCKINFO  m_ckRiff;  // Use in opening a WAVE file 
    DWORD   m_dwSize;  // The size of the wave file 
    MMIOINFO  m_mmioinfoOut; 
    DWORD   m_dwFlags; 
    BOOL   m_bIsReadingFromMemory; 
    BYTE*   m_pbData; 
    BYTE*   m_pbDataCur; 
    ULONG   m_ulDataSize; 
    CHAR*   m_pResourceBuffer; 

protected: 
    HRESULT ReadMMIO(); 
    HRESULT WriteMMIO(WAVEFORMATEX *pwfxDest); 

public: 
    CWaveFile(); 
    ~CWaveFile(); 

    HRESULT Open(LPTSTR strFileName, WAVEFORMATEX* pwfx, DWORD dwFlags); 
    HRESULT Close(); 

    HRESULT Read(BYTE* pBuffer, DWORD dwSizeToRead, DWORD* pdwSizeRead); 
    HRESULT Write(UINT nSizeToWrite, BYTE* pbData, UINT* pnSizeWrote); 

    DWORD GetSize(); 
    HRESULT ResetFile(); 
    WAVEFORMATEX* GetFormat() { return m_pwfx; }; 
}; 
#endif // DSUTIL_H 
/////////////////////////////////////////////////////////////////////////////// 
// The function that causes the error 

HRESULT CSoundManager::Initialize(HWND hWnd, DWORD dwCoopLevel) 
{ 
    HRESULT hr; 

    SAFE_RELEASE(m_pDS); 

    // Create IDirectSound using the primary sound device 
    if(FAILED(hr = DirectSoundCreate8(NULL, &m_pDS, NULL))) 
     return DXTRACE_ERR(TEXT("DirectSoundCreate8"), hr); 

    // Set DirectSound coop level 
    if(FAILED(hr = m_pDS->SetCooperativeLevel(hWnd, dwCoopLevel))) 
     return DXTRACE_ERR(TEXT("SetCooperativeLevel"), hr); 

    return S_OK; 
} 
+0

'1'あなたは完全なエラーメッセージ '2が含まれている必要があります'add' #pragma comment(lib、 "dsound.lib"); '次のような行:http://stackoverflow.com/questions/15543918/application-works-in-visual-studio-but-release-debug-exe -does-not –

+0

私はそれを忘れてしまった。エラーの一覧を編集しました。 –

+0

.libを追加すると(上記参照)、2番目のエラーが修正されます。最初のものについては、http://stackoverflow.com/questions/9392252/which-header-should-i-include-for-dxtrace –

答えて

2

エラーLNK2019は、欠落しているライブラリの追加に関するものです - 一般的な問題です。不足しているシンボルを特定し、さらにリンクするライブラリを特定してから#pragmaを使用して追加するか、プロジェクト設定で追加する必要があります。

また、初心者の質問でもあるように、おそらくStack Overflowは、すでに密接に関連しています。コードスニペットを自分のものと比較して、必ずそれを検索してください。

関連の質問は、あなたがリンクするdsound.libとdxerr.libが必要であることを示している。

関連する問題