C++ DLL奇怪的问题

LandyTan 2018-11-13 06:01:22
#ifdef MYSQL_EXPORTS
#define MYSQL_API __declspec(dllexport)
#else
#define MYSQL_API __declspec(dllimport)
#endif

h文件中使用以上代码就报错,使用以下代码就没问题
#ifdef SQLSERVER_EXPORTS
#define MYSQL_API __declspec(dllexport)
#else
#define MYSQL_API __declspec(dllimport)
#endif


报错内容:
1>error LNK2019: 无法解析的外部符号 "__declspec(dllimport) const CSqlObject::`vftable'" (__imp_??_7CSqlObject@@6B@),该符号在函数 "public: __cdecl CSqlObject::CSqlObject(void)" (??0CSqlObject@@QEAA@XZ) 中被引用
1> error LNK2019: 无法解析的外部符号 "__declspec(dllimport) const CSQLPcm::`vftable'" (__imp_??_7CSQLPcm@@6B@),该符号在函数 "public: __cdecl CSQLPcm::CSQLPcm(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (??0CSQLPcm@@QEAA@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 中被引用
1>fatal error LNK1120: 2 个无法解析的外部命令

麻烦各位大佬帮忙看一下,谢谢!
完整代码:
.h
#ifdef MYSQL_EXPORTS
#define MYSQL_API __declspec(dllexport)
#else
#define MYSQL_API __declspec(dllimport)
#endif

#include <WinSock2.h>
#include <iostream>
#include <string>
#include <list>
#include <tuple>
#include "mysql.h"
using namespace std;

#pragma comment(lib, "libmysql.lib")
#pragma warning(disable:4267)
#define cstring const string

enum PCM_PRODUCT
{
LOGIN,
PASSWORD,
PHONE
};
class MYSQL_API CSqlObject
{
public:
CSqlObject();
virtual ~CSqlObject();

public:
string GetErrorDesc();
int GetErrorID();
bool Connect(__in string szIpAddr, __in unsigned int unPort,
__in string szUser, __in string szPass, __in string szDatabase);
bool Command(__in string szComm);
virtual bool Result(__out string **pOutBuf, __out int *pNum, __in string symbol = "\t");
int Encrypt(__inout char* pInOut, __in int len);
int Decrypt(__inout char* pInOut, __in int len);
int RecordMemoryAddr(__in const char* pString, __in int len, __out char** pOut);
int ReductionMemoryAddr(__in const char* pInHex, __in int len, __out char** pOut);
tuple<int, string*> Split(__in string Value, __in string symbol);
protected:
MYSQL *m_pMySQL;
int m_nErrorID;
};

class MYSQL_API CSQLPcm : public CSqlObject
{
public:
CSQLPcm(cstring _user = "");
inline cstring GetUser()const;
inline void SetUser(cstring _user);

public:
list<void*>* Result(PCM_PRODUCT Pro);
list<void*>* Select(PCM_PRODUCT Pro, cstring _cszWhileValue = "");
list<void*>* Select(PCM_PRODUCT Pro, void* _pPhone);
bool Add(PCM_PRODUCT Pro, void* _pPhone);
bool Update(PCM_PRODUCT Pro, void* _pPhone1, void* _pPhone2);
bool Delete(PCM_PRODUCT Pro, void* _pPhone);
private:
string m_szUserId;
};


.cpp
#include "stdafx.h"
#include "CMySQL.h"
#include <queue>
using namespace std;


CSqlObject::CSqlObject()
:m_nErrorID(0)
, m_pMySQL(new MYSQL){}

CSqlObject::~CSqlObject(){}

bool CSqlObject::Connect(__in string szIpAddr, __in unsigned int unPort,
__in string szUser, __in string szPass, __in string szDatabase){return true;}

bool CSqlObject::Command(__in string szComm){return true;}

bool CSqlObject::Result(__out string **pOutBuf, __out int *pNum, __in string symbol){return true;}

string CSqlObject::GetErrorDesc(){return "";}

int CSqlObject::GetErrorID(){return 0;}

tuple<int, string*> CSqlObject::Split(__in string Value, __in string symbol){return make_tuple(0, (string*)NULL);}

int CSqlObject::Encrypt(char* pInOut, int len){return 0;}

int CSqlObject::Decrypt(char* pInOut, int len){return 0;}

int CSqlObject::RecordMemoryAddr(const char* pString, int len, char** pOut){return 0;}

int CSqlObject::ReductionMemoryAddr(const char* pInHex, int len, char** pOut){return 0;}

//////////////////////////////////////////////////////////

CSQLPcm::CSQLPcm(cstring _user)
:m_szUserId(_user){}

cstring CSQLPcm::GetUser()const{return "";}

void CSQLPcm::SetUser(cstring _user){}

list<void*>* CSQLPcm::Result(PCM_PRODUCT Pro){return NULL;}

list<void*>* CSQLPcm::Select(PCM_PRODUCT Pro, cstring _cszWhileValue){return NULL;}

list<void*>* CSQLPcm::Select(PCM_PRODUCT Pro, void* Param){return NULL;}

bool CSQLPcm::Add(PCM_PRODUCT Pro, void* Param){return true;}

bool CSQLPcm::Update(PCM_PRODUCT Pro, void* Param1, void* Param2){return true;}

bool CSQLPcm::Delete(PCM_PRODUCT Pro, void* Param){return true;}

...全文
42 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
搜索C++导出类

64,635

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧