[Setting]用VS2008將類封裝為靜態庫library
阿新 • • 發佈:2019-01-06
原創文章,歡迎轉載。轉載請註明:轉載自 祥的部落格
大家可能因為這樣那樣的原因,要將原始碼封裝為動態連結庫(DLL)或靜態連結庫(Lib)。
準備工作
將你的類的宣告和實現分離,h檔案中只是類的宣告
,cpp檔案是類的實現
我這個類是封裝好了UDP。
- QfxClassUDP.h
- QfxClassUDP.cpp
準備的H檔案
#ifndef _QFX_CLASS_UDP_H
#define _QFX_CLASS_UDP_H
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
//UDP Class write by Qfx 2016.2.9
//The code based on the Winsocket
//*********************************************************************************************************
//Part1.
//自定義UDP類接收和傳送資料型別
//*********************************************************************************************************
//IPandPort
//該結構體用於存放IP地址和埠號
struct IPandPort
{
char IP[20];
unsigned short Port;
};
//Receive Data Pack
//用於存放接收資料,使用union是便於接收和獲取對應的資料
union DataReceive
{
char Buf[128];
struct DataDetail
{
double Test0_double;
UINT8 Test1_u8;
UINT8 Test2_u8[32];
double Test3_double;
}data;
};
//Receive Data Pack
//用於打包傳送資料,使用union是便於接收和獲取對應的資料
union DataSend
{
char Buf[128];
struct DataDetail
{
double Test0_double;
UINT8 Test1_u8;
UINT8 Test2_u8[32];
double Test3_double;
}data;
};
//*********************************************************************************************************
//Part2.
//Class Declaration我的UDP類的宣告
//*********************************************************************************************************
class QfxUDP
{
private:
WSADATA m_wsaData;
SOCKET m_HostSocket;//本機對應Socket
public:
char m_HostIP[20];//本機繫結的IP地址
unsigned short m_HostPort; //本機繫結的埠號
char m_FromIP[20];//對方的IP地址
unsigned short m_FromPort;//對方的埠號
public:
//************************************
// Method: 初始化套接字
// FullName: InitSocket
// Access: public
// Returns: BOOL [->] if success return "True", if fail return "False"
// Qualifier:
// Parameter: unsigned short Port [->] Host Port for receive
//************************************
BOOL InitSocket(unsigned short Port);
//************************************
// Method: 獲取本地IP地址
// FullName: GetHostIP
// Access: public
// Returns: BOOL [->] if success return TRUE. Otherwise return FALSE
// Qualifier:
// Parameter: char * HostIP [->] Host IP
//************************************
BOOL GetHostIP(char* HostIP);
//************************************
// Method: 關閉套接字
// FullName: DeletSocket
// Access: public
// Returns: BOOL
// Qualifier:
//************************************
BOOL DeletSocket(void);
//************************************
// Method: UDP傳送函式
// FullName: UDP_Send
// Access: public
// Returns: void
// Qualifier:
// Parameter: char * IP [->] 目標IP地址
// Parameter: int Port [->] 目標埠號
// Parameter: char * buf [->] 傳送的資料
// Parameter: int len [->] 傳送的資料長度
// Parameter: int flags [->] Indicator specifying the way in which the call is made
//************************************
void UDP_Send( char* IP, unsigned short Port, char* buf, int len, int flags = 0);
//************************************
// Method: UDP接收函式
// FullName: UDP_Rece
// Access: public
// Returns: int [->] 成功後,返回接到的資料大小
// Qualifier:
// Parameter: char * buf [->] 接收資料儲存的地址
// Parameter: int len [->] 接收資料的大小
// Parameter: int flags [->] Indicator specifying the way in which the call is made
//************************************
int UDP_Rece( char* buf, int len, int flags = 0);
};
#endif
準備的CPP檔案
#include <iostream>
using namespace std;
#include "QfxClassUDP.h"
BOOL QfxUDP::GetHostIP( char* HostIP )
{
//程式碼實現
}
BOOL QfxUDP::InitSocket( unsigned short Port )
{
//程式碼實現
}
BOOL QfxUDP::DeletSocket( void )
{
//程式碼實現
}
void QfxUDP::UDP_Send( char* IP, unsigned short Port, char* buf, int len, int flags /*= 0*/ )
{
//程式碼實現
}
int QfxUDP::UDP_Rece( char* buf, int len, int flags /*= 0*/ )
{
//程式碼實現
}
VS2008配置
Step1 建立解決方案
Step2 新增程式碼,編譯成Lib
呼叫Lib檔案
兩種方法
- 在在編譯器中配置(但是我不喜歡,這樣程式碼移植時候很蛋疼)
- 在程式碼中多寫一句預編譯程式碼(推薦)
程式碼如下:
#include <iostream>
using namespace std;
//包含庫的標頭檔案
#include "QfxClassUDP.h"
//新增lib庫
#pragma comment(lib,"ClassLibrary.lib")
···
···