首页
社区
课程
招聘
[求助]vc把这段代码写在dll中怎么没有结果?
发表于: 2008-5-27 14:32 4757

[求助]vc把这段代码写在dll中怎么没有结果?

2008-5-27 14:32
4757
char* WINAPI dectohex (int num)
{
  char temp[50];
  sprintf(temp,"%x",num);
  return temp;
}


应该是正确的呀?可是为什么在vb调用总是返回空的呢~~ 不知道是什么原因啊?
请告诉我一下好吗?谢谢

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
当然会空了,函数的局部变量在函数返回后就会被释放。你如果要在函数里返回字符串函数必须带有一个输出缓冲参数变量,或者你在函数内部申请内存才行。不过,在函数内部申请内存的做法不太好管理和维护,你的程序必须在调用该函数后不用这个内存时必须释放他,最好的方法就是函数带输出缓冲的参数变量。如:
char* WINAPI dectohex (int num,char* OutChar)
{
  sprintf(OutChar,"%x",num);
  return OutChar;
}
2008-5-27 15:13
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
3
最好还要加上一个Out缓冲区大小参数,以免函数内部不知道传入的缓冲区大小而引发可能溢出缓冲区的操作。
char* WINAPI dectohex (int num,char* OutChar,int OutBuffSize)
{
  sprintf(OutChar,"%x",num);
  return OutChar;
}
2008-5-27 15:19
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢我们热心的小虾班班...您真是太好了

代码备用.:学习记录
char* WINAPI dectohex (int num,char *temp=NULL)
{
  temp=new char[50];
  sprintf(temp,"%x",num);
  return temp;
}
2008-5-27 16:03
0
雪    币: 104
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
char* WINAPI dectohex (int num,char *temp=NULL)
{
temp=new char[50];
sprintf(temp,"%x",num);
return temp;
}

在VB中调用的时候小心有内存泄漏哦~~记得再导出一个用来释放缓冲区的函数。
或者,牺牲线程安全:
char* WINAPI dectohex (int num,char *temp=NULL)
{
static char temp[50];
sprintf(temp,"%x",num);
return temp;
}
2008-5-27 16:26
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
请大侠赐教,有点迷糊~
delete temp ?????
2008-5-27 16:47
0
雪    币: 115
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
楼主去看看内存分配方式就知道原因了。

函数内的局部变量是在栈上创建的,函数返回时自动被释放;
动态创建的内存是在堆上分配的,但是new之后,要记得free,不然会出现内存泄漏
2008-5-28 18:53
0
雪    币: 183
活跃值: (203)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
严重的学习了....
2008-5-30 12:34
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
char* WINAPI dectohex (int num,char temp[50])
{
  memset(temp,0,50);
  sprintf(temp,"%x",num);
  return temp;
} 


学习了~ 那这个样子应该可以了哦~~
2008-5-30 22:35
0
游客
登录 | 注册 方可回帖
返回
//