ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

动态库封装参考模板

2022-04-06 00:01:56  阅读:122  来源: 互联网

标签:封装 参考 int buflen ret sh handle NULL 模板


#include "stdio.h"
#include "stdlib.h"
#include "string.h"
//VS2012 动态库 第一套模板
typedef struct _SCK_HANDLE {
    char    version[16];
    char    serverip[16];
    int        serverport;
    char    *pBuf;
    int        buflen;
}SCK_HANDLE;

//------------------第一套api接口---Begin--------------------------------//
    //客户端初始化 获取handle上下文
__declspec(dllexport) //加这个才能导出lib
int cltSocketInit(void **handle /*out*/)
{
    int ret = 0;
    SCK_HANDLE *sh = NULL;
    sh = (SCK_HANDLE *)malloc(sizeof(SCK_HANDLE));
    if(sh == NULL)
    {
        ret = -1;
        //打印日志
        printf("func cltSocketInit() err:%d", ret);
        return ret;
    }
    strcpy(sh->version, "1.0.0");
    strcpy(sh->serverip, "192.168.0.100");
    sh->serverport = 8080;
    *handle = sh;
    return 0;
}

//客户端发报文
__declspec(dllexport)
int cltSocketSend(void *handle /*in*/, unsigned char *buf /*in*/,  int buflen /*in*/)
{
    int ret = 0;
    SCK_HANDLE *sh = NULL;
    if(handle == NULL || buf == NULL || buflen > 33333333333)
    {
        ret = -1;
        printf("func cltSocketSend() err:%d", ret);
        return ret;
    }
    sh = (SCK_HANDLE *)handle;
    sh->pBuf = (char *)malloc(buflen * sizeof(char));
    if(sh->pBuf == NULL)
    {
        ret = -1;
        printf("func cltSocketSend() malloc err, buflen:%d", buflen);
        return ret;
    }
    memcpy(sh->pBuf, buf, buflen);
    sh->buflen = buflen;

    return ret;
}

//客户端收报文
__declspec(dllexport)
int cltSocketRev(void *handle /*in*/, unsigned char *buf /*in*/, int *buflen /*in out*/)
{
    int ret = 0;
    SCK_HANDLE *sh = NULL;
    if(handle == NULL || buf == NULL || buflen == NULL)
    {
        ret = -1;
        printf("func cltSocketRev() err:%d", ret);
        return ret;
    }
    sh = (SCK_HANDLE *)handle;

    memcpy(buf, sh->pBuf, sh->buflen);
    *buflen = sh->buflen;
    return ret;
}

//客户端释放资源
__declspec(dllexport)
int cltSocketDestory(void *handle/*in*/)
{
    int ret = 0;
    SCK_HANDLE *sh = NULL;
    if(handle == NULL)
    {
        ret = -1;
        printf("func cltSocketRev() err:%d", ret);
        return ret;
    }
    sh = (SCK_HANDLE *)handle;

    if(sh->pBuf != NULL)
    {
        free(sh->pBuf);
    }
    free(sh);

    return ret;
}

  

标签:封装,参考,int,buflen,ret,sh,handle,NULL,模板
来源: https://www.cnblogs.com/xiaochouk/p/16104618.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有