.lib文件什么情况下需要重新编译

C++中对动态链接库的调用,一般是采用.h + .lib + .dll的方式。(当然,也可以使用静态lib或者是只有dll,然后用LoadLibrary的方式调用)。由于.lib文件是在链接时使用,因此只要头文件接口未发生变化,则.lib文件不用重新编译。

对C++动态链接库导出类的情况,我们可以准备两个.h头文件。一个供dll本身使用,一个供调用dll时使用。后者.h是前者.h的子集。后者.h仅需要提供类的公共成员变量及成员函数即可。举例如下:

供dll自身使用的.h头文件:

#pragma once #ifdef LOG_EXPORTS #define LOG_API __declspec(dllexport) #else #define LOG_API __declspec(dllimport) #endif #include "WnCriticalSection.h" #include "BuffList.h" #define WATCH_BUFFER const int LOG_OK = 0; const int LOG_FAIL = -1; // This class is exported from the Log.dll class LOG_API CLog { public: static CLog& GetInstance(); public: // 添加日志 int AddLog(char* pszLogTxt); // 设置日志文件存放路径 // bDate: 是否按日期命名(每天一个独立的日志文件) int SetLogPath(const char* szLogPath, bool bDate = false); protected: // 运行线程 static UINT WINAPI RunThread(void* ptr); #ifdef WATCH_BUFFER // 检查buffer状态的线程 static UINT WINAPI WatchThread(void* ptr); #endif protected: char m_szLogPath[MAX_PATH]; FILE* m_pLogFile; // 构造线程安全类 CWnCriticalSection m_cs; // 是否一天一个log文件 bool m_bOneDayOneLog; // 当前日期 string m_strCurrentDate; // 日志队列 // 注:仅包含raw日志,不包含时间等附加信息 CWnList m_bufferList; // 运行线程句柄 HANDLE m_hRunThread; // 传递线程参数的事件通知 HANDLE m_hThreadParamEvent; // 有日志到来的事件通知 HANDLE m_hHaveLogEvent; // 退出类的事件通知 HANDLE m_hExitEvent; private: CLog(); ~CLog(); };

 

供调用dll使用的头文件:

#pragma once const int LOG_OK = 0; const int LOG_FAIL = -1; // This class is exported from the Log.dll class CLog { public: static CLog& GetInstance(); public: // 添加日志 int AddLog(char* pszLogTxt); // 设置日志文件存放路径 // bDate: 是否按日期命名(每天一个独立的日志文件) int SetLogPath(const char* szLogPath, bool bDate = false); };

你可能感兴趣的:(String,api,Class,buffer,dll,winapi)