我写了一个DLL不知对不对,编译没问题可不知道为什么我在一个Application中引入时显示
TestLib.obj : error LNK2001: unresolved external symbol "public: __thiscall TEST::TEST(void)" (??0TEST@@QAE@XZ)
DLLTest.exe : fatal error LNK1120: 1 unresolved externals
我把ITest.h加到了Application的目录下,include了ITest.h也import了Testlib.lib可不为什么总是显示上面的错误!麻烦大家帮助看一下感激不尽。
//TestLib.def
; TestLib.def : Declares the module parameters.LIBRARY      "TestLib"
DESCRIPTION  'TestLib for TestCom by (C) 2004'EXPORTS
LSPCreateTest   @1
DllAddNum       @2//ITest.h
#if !defined(ITEST_H)
#define ITEST_H
#include "Objbase.h"typedef struct ITEST* LPITEST;#undef INTERFACE
#define INTERFACE ITEST
DECLARE_INTERFACE_( ITEST, IUnknown )
{
    STDMETHOD(QueryInterface)  (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
    STDMETHOD_(ULONG,AddRef) (THIS) PURE;
    STDMETHOD_(ULONG,Release)(THIS) PURE;
    STDMETHOD_(DWORD,GetNum) (THIS) PURE;
    STDMETHOD(SetNum) (THIS_ DWORD dwNum) PURE;
};typedef HRESULT (WINAPI *LSCreateTest)(LPITEST* ppITest);
HRESULT WINAPI LSPCreateTest(LPITEST* ppITest);HRESULT WINAPI DllAddNum(DWORD *dwNum);
#endif//Test.h
#if !defined(AFX_TEST_H__1471A3C0_8213_4229_AA89_DA0DA977F55C__INCLUDED_)
#define AFX_TEST_H__1471A3C0_8213_4229_AA89_DA0DA977F55C__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000#include "ITEST.h"class TEST : public ITEST
{
public:
TEST();
virtual ~TEST();
STDMETHODIMP     QueryInterface(REFIID riid, LPVOID * ppvObj);
STDMETHODIMP_(ULONG)  AddRef(void);
STDMETHODIMP_(ULONG)  Release(void);
STDMETHODIMP_(DWORD)  GetNum(void);
STDMETHODIMP          SetNum(DWORD dwNum);
protected:
DWORD dwNum;
long  m_lRef;
};
#endif//Test.cpp
#include "TEST.h"
TEST::TEST(){
dwNum = 0;
m_lRef = 0l;
}TEST::~TEST(){}STDMETHODIMP TEST::QueryInterface(REFIID riid, LPVOID* ppv){
if (!this) 
return ResultFromScode(E_INVALIDARG);
*ppv = this;
((LPUNKNOWN)*ppv)->AddRef();
return S_OK;
}STDMETHODIMP_(ULONG) TEST::AddRef(void){
if (!this) 
return 0;
InterlockedIncrement(&m_lRef);
return m_lRef;
}STDMETHODIMP_(ULONG) TEST::Release(void){
if (!this || m_lRef == 0) 
return 0;
InterlockedDecrement(&m_lRef);
return m_lRef;
}STDMETHODIMP_(DWORD) TEST::GetNum(void){return dwNum;}STDMETHODIMP TEST::SetNum(DWORD dwNum){
this->dwNum=dwNum;
return S_OK;
}//TestLib.cpp
#include <windows.h>
#include "TEST.h"
DWORD gdwRefCount = 0;
HANDLE ghInstance = NULL;
BOOL WINAPI DllMain(HINSTANCE hmod,DWORD dwReason,LPVOID lpvReserved){
switch( dwReason ) {
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls( hmod );
if(gdwRefCount == 0 )
ghInstance = hmod;
gdwRefCount++;
break;

case DLL_PROCESS_DETACH: 
gdwRefCount--;   
break;

default:
break;
}
return TRUE;
} HRESULT WINAPI DllAddNum(DWORD *dwNum){
*dwNum += 20;
return S_OK;
}HRESULT WINAPI LSPCreateTest(LPITEST* ppITest){
TEST* pITest = new TEST;
if(pITest==NULL)
return E_OUTOFMEMORY;
LPITEST s = NULL;

*ppITest = pITest;

return S_OK;
}

解决方案 »

  1.   

    你未为TEST类的构造函数提供实现。
      

  2.   

    老大,你是不是耍我,我把你的东西copy过来编译怎么一点问题没有!
      

  3.   

    我知道编译没问题可是我生成了一个application后引入这个lib总是提示上面的错误
      

  4.   

    #include <windows.h>
    #include "Itest.h"int __stdcall WinMain(HINSTANCE hInstance,
        HINSTANCE hPrevInstance,
        LPSTR lpCmdLine,
        int nCmdShow)
    {
    ITEST* pTest;
    LSPCreateTest(&pTest);
    pTest->AddRef(); return 0;
    }
    你把dll copy到application的debug目录下了吗?
      

  5.   

    把TestLib.lib, ITest.h copy到工程文件目录下, 把TestLib.dll copy到debug目录下
      

  6.   

    send me message and give me your msn