动态库封装参考模板
#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; }