描述:我用MFC写了个程序,我想把里面的部分功能拿出来做成DLL。新建DLL项目的时候选择了win32 dll,编译通过了,但是添加到MFC项目中调用时出现错误。
头文件和对应的DLL和LIB文件都复制到MFC项目目录下了。
dll 里的头文件定义:#pragma once
#ifndef _CAPTURE_SOUND_H_
#define _CAPTURE_SOUND_H_
#include <windows.h>
#include <mmsystem.h>
#include <dsound.h> 
#pragma comment(lib, "dxguid.lib")
#pragma comment(lib, "dsound.lib")#define NUM_REC_NOTIFICATIONS  16
#define BUF_SIZE 480class _declspec(dllexport) CAdoFrameHandler {
public:
virtual void AdoFrameData(BYTE* pBuffer, long lBufferSize) = 0 ; 
};#ifdef _CLASSINDLL 
#define CLASSINDLL_CLASS_DECL  __declspec(dllexport) 
#else 
#define CLASSINDLL_CLASS_DECL  __declspec(dllimport) 
#endif 
#ifdef __cplusplus 
extern "C" { 
#endif class CLASSINDLL_CLASS_DECL CDSoundIn
{
public:
BOOL        m_bRecording ;  //recording now ? also used by event recv thread 
protected:
LPDIRECTSOUNDCAPTURE8    m_pCapDev ;   //capture device ptr
LPDIRECTSOUNDCAPTUREBUFFER m_pCapBuf ;   //capture loop buffer ptr
LPDIRECTSOUNDNOTIFY8    m_pNotify ;   //capture auto-notify event callback handler ptr 
GUID        m_guidCapDevId ;  //capture device id
WAVEFORMATEX      m_wfxInput;   //input wave format description struct 
DSBPOSITIONNOTIFY     m_aPosNotify[NUM_REC_NOTIFICATIONS + 1]; //notify flag array 
HANDLE        m_hNotifyEvent;   //notify event 
BOOL        m_abInputFmtSupported[20];
DWORD        m_dwCapBufSize;  //capture loop buffer size 
DWORD        m_dwNextCapOffset;//offset in loop buffer 
DWORD        m_dwNotifySize;  //notify pos when loop buffer need to emit the event 
CAdoFrameHandler*     m_frame_handler ; // outer frame data dealer ptr
HANDLE m_hThread;
DWORD m_dwThreadID;
public: // callback func to add enum devices string name 
static BOOL CALLBACK enum_dev_proc(LPGUID lpGUID, LPCTSTR lpszDesc, 
LPCTSTR lpszDrvName, LPVOID lpContext ) ; 
static void * notify_capture_thd(LPVOID data) ; 
protected:
HRESULT InitDirectSound(GUID dev_id = GUID_NULL) ; 
HRESULT FreeDirectSound() ; 
HRESULT InitNotifications() ; 
HRESULT CreateCaptureBuffer(WAVEFORMATEX * wfx) ; 
HRESULT StartOrStopRecord(BOOL bStartRec) ;
HRESULT RecordCapturedData() ; 
void    SetWavFormat(WAVEFORMATEX * wfx) ; 
void GetWaveFormatFromIndex( WAVEFORMATEX* pcmwf );
public:
CDSoundIn(void);
~CDSoundIn(void);
BOOL EnumDevices(HWND hList) ;
BOOL Open(void) ; 
BOOL Close() ; 
void GrabAudioFrames(BOOL bGrabAudioFrames, CAdoFrameHandler* frame_handler) ; 
}; 
#ifdef __cplusplus 
}; 
#endif
#endifMFC调用:#pragma once#include "DSoundIn.h"// CTestAudioDllDlg 对话框
class CTestAudioDllDlg : public CDialog
{................省略若干行
 CDSoundIn m_DSoundIn;
};报错:

1>TestAudioDll.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall CDSoundIn::~CDSoundIn(void)" (__imp_??1CDSoundIn@@QAE@XZ),该符号在函数 "public: virtual __thiscall CTestAudioDllDlg::~CTestAudioDllDlg(void)" (??1CTestAudioDllDlg@@UAE@XZ) 中被引用
1>TestAudioDllDlg.obj : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall CDSoundIn::~CDSoundIn(void)" (__imp_??1CDSoundIn@@QAE@XZ)
1>TestAudioDllDlg.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall CDSoundIn::CDSoundIn(void)" (__imp_??0CDSoundIn@@QAE@XZ),该符号在函数 "public: __thiscall CTestAudioDllDlg::CTestAudioDllDlg(class CWnd *)" (??0CTestAudioDllDlg@@QAE@PAVCWnd@@@Z) 中被引用
1>E:\test\TestAudioDll\Debug\TestAudioDll.exe : fatal error LNK1120: 2 个无法解析的外部命令