可能重复:
通过 C++ 接口导出整个类
从本教程开始,我尝试使用 2 个项目(一个 .dll 构建器和一个 .exe 构建器)来做我自己的 VS 解决方案,这里是 .dll 项目标头:libheader.h
#pragma once
#ifdef SHREDLIB_EXPORTS
#define SHREDAPI __declspec(dllexport)
#else
#define SHREDAPI __declspec(dllimport)
#endif
struct IShred
{
virtual int GetStringSize(char*) = 0;
virtual void Release() = 0;
};
// Handle type. In C++ language the iterface type is used.
typedef IShred* SHREDHANDLE;
#ifdef __cplusplus
# define EXTERN_C extern "C"
#else
# define EXTERN_C
#endif // __cplusplus
EXTERN_C
SHREDAPI
SHREDHANDLE
WINAPI
GetShred(void);
libheader.cpp
#include libheader.h
class IShredLib: public IShred {
int GetStringSize(char*);
void Release();
};
int IShredLib::GetStringSize(char* s)
{
return strlen(s);
}
void IShredLib::Release()
{
delete this;
}
#pragma comment(linker, "/export:GetShred=_GetShred@0")
SHREDAPI SHREDHANDLE APIENTRY
GetShred()
{
return new IShredLib;
}
这在 main.cpp exe 项目中:
#include "libheader.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
IShred* itf = ::GetShred();
_getch();
return 0;
}
现在为什么我会得到这个? 错误 1 错误 LNK2001:无法解析的外部符号 __imp__GetShred@0 我还将 SHREDLIB_EXPORTS 定义为 VS .dll 项目属性中定义的 c++ 预处理器。