我写了一个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;
}
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;
}
解决方案 »
- mfc 对话框下拉菜单图标
- API用什么函数将小数转换为字符串
- VC COM编程学习
- 如何访问CView类中的变量
- 我想给列表控件的每个单元格中的文本都用我指定的颜色显示,如果单元格很多的话,那我该怎么保存这些行号、列号及颜色值呢?
- xtreme toolkit9.6,如何编译一个中文版本的库,有时点出来的右键菜单是英文的?
- 如何让一个服务端组件通知所有客户端?
- 如何使用扩展MFCDLL的输出类.
- 我刚学VC++,问一个很蠢的问题,VC++既然是可视化的为什么没象VB里那的控件?
- to 111222(麻烦你帮小弟看一看\n http://www.csdn.net/expert/topic/162/162586.shtm)
- 怎么在mdi中 让子窗口不能最大化 和不能拖动大小。
- 这个路径怎么判断??谢谢!!
#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目录下了吗?