dll调用完毕后,里面的内存变量,如何不释放

[复制链接]
查看11 | 回复5 | 2021-1-27 06:22:37 | 显示全部楼层 |阅读模式
我创建一个DLL,当第一次调用这个DLL时,首先调用函数connect(代码如下),这函数是一个创建连接server端的函数,返回一个socket值,当调用完这个DLL后,如何让这个函数里面的值不会被释放,而是保存在内存中.这样,当第二次..第二次调用这个DLL函数后,只要值得函数返回的socket值就可了,这样就没必要每都去连接server后在发送,接收,就高人指点
SOCKETs;
WORDwVersionRequested;
WSADATAwsa;
wVersionRequested=MAKEWORD(2,2);
intres=WSAStartup(wVersionRequested,&wsa);
if(res==-1)
{
return_char="1001";
returns;
}
structsockaddr_insocket_in;
s=WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,0);
if(s==INVALID_SOCKET)
{
return_char="1002";
returns;
}
socket_in.sin_family=AF_INET;
socket_in.sin_port=htons(8080);
socket_in.sin_addr.S_un.S_addr=inet_addr(cs_serip);
intcon_res=connect(s,(structsockaddr*)&socket_in,sizeof(socket_in));
if(con_res==SOCKET_ERROR)
{
//失败
return_char="1002";
closesocket(s);
WSACleanup();
returns;
}
else
{
return_char="0000";
returns;
}
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:22:37 | 显示全部楼层
SOCKETs;
如果这个是全局变量(或class/struct),那么在显示释放前,他本身就没有释放;
只要你不覆盖/修改掉它,就可以直接重用。
回复

使用道具 举报

千问 | 2021-1-27 06:22:37 | 显示全部楼层
用全局变量?
SOCKETg_s;
DLLMAIN中g_s=INVALID_SOCKET;
在你的函数中
if(g_s==INVALID_SOCKET)
{
你原来的过程
}
return_char="0000";
returng_s;
回复

使用道具 举报

千问 | 2021-1-27 06:22:37 | 显示全部楼层
搞个全局变量,存下来就好了
回复

使用道具 举报

千问 | 2021-1-27 06:22:37 | 显示全部楼层
弄个静态的
回复

使用道具 举报

千问 | 2021-1-27 06:22:37 | 显示全部楼层
静态连接就可以了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行