1. 程式人生 > >[Setting]用VS2008將類封裝為靜態庫library

[Setting]用VS2008將類封裝為靜態庫library

原創文章,歡迎轉載。轉載請註明:轉載自 祥的部落格

大家可能因為這樣那樣的原因,要將原始碼封裝為動態連結庫(DLL)或靜態連結庫(Lib)。

準備工作

將你的類的宣告和實現分離,h檔案中只是類的宣告cpp檔案類的實現
我這個類是封裝好了UDP。

  1. QfxClassUDP.h
  2. 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 建立解決方案

pic1

pic2

pic3

Step2 新增程式碼,編譯成Lib

pic4

pic5

呼叫Lib檔案

兩種方法

  1. 在在編譯器中配置(但是我不喜歡,這樣程式碼移植時候很蛋疼)
  2. 在程式碼中多寫一句預編譯程式碼(推薦)

程式碼如下:


#include <iostream>
using namespace std;
//包含庫的標頭檔案
#include "QfxClassUDP.h" 
//新增lib庫
#pragma comment(lib,"ClassLibrary.lib") 

···
···

donate