动态库封装参考模板

#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;
}

  

posted @ 2022-04-05 23:50  小丑_jk  阅读(32)  评论(0编辑  收藏  举报