前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Setting]用VS2008将类封装为静态库library

[Setting]用VS2008将类封装为静态库library

作者头像
祥知道
发布2020-03-10 15:05:13
4120
发布2020-03-10 15:05:13
举报
文章被收录于专栏:祥的专栏祥的专栏

原创文章,欢迎转载。转载请注明:转载自 祥的博客

原文链接:http://blog.csdn.net/humanking7/article/details/50726271


大家可能因为这样那样的原因,要将源代码封装为动态链接库(DLL)或静态链接库(Lib)。

准备工作

将你的类的声明和实现分离,h文件中只是类的声明cpp文件类的实现 我这个类是封装好了UDP。

  1. QfxClassUDP.h
  2. QfxClassUDP.cpp

准备的H文件

代码语言:javascript
复制
#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文件

代码语言:javascript
复制
#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
pic1
pic2
pic2
pic3
pic3

Step2 添加代码,编译成Lib

pic4
pic4
pic5
pic5


调用Lib文件

两种方法

  1. 在在编译器中配置(但是我不喜欢,这样代码移植时候很蛋疼)
  2. 在代码中多写一句预编译代码(推荐)

代码如下:

代码语言:javascript
复制
#include <iostream>
using namespace std;
//包含库的头文件
#include "QfxClassUDP.h" 
//添加lib库
#pragma comment(lib,"ClassLibrary.lib") 

···
···

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备工作
    • 准备的H文件
      • 准备的CPP文件
      • VS2008配置
        • Step1 创建解决方案
          • Step2 添加代码,编译成Lib
          • 调用Lib文件
          相关产品与服务
          数据保险箱
          数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档