CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

在DLL中定义一个函数返回字符串,应该声明成什么类型。

楼主wenhui1215()2005-04-02 23:28:43 在 VC/MFC / 进程/线程/DLL 提问

我的定义如下  
  这是定义的一个类的成员函数:  
  LPCTSTR   CTransData::HeaderInfo()  
  {  
  CString   lpstrInfo,   str;  
  ReadFile();  
  if(m_FileHeader.DeviceID   !=   DEVICE_NUM)  
  {  
  AfxMessageBox("此文件不能解析");  
  return   FALSE;  
  }  
   
    switch(m_FileHeader.BusType)  
  {  
  case   1:  
  str="板卡类型:PCI             ";  
  break;  
  case   2:  
  str="板卡类型:USB             ";  
  break;  
  case   3:  
  str="板卡类型:ISA             ";  
  break;  
  case   4:  
  str="板卡类型:PC104             ";  
  break;  
  }  
   
  lpstrInfo   =   str;  
   
  str.Format("板卡型号:%X\r\n",m_FileHeader.DeviceID);  
  lpstrInfo   +=   str;  
   
  str.Format("文件头大小:%d字节\r\n",   m_FileHeader.HeaderSizeBytes);  
  lpstrInfo   +=   str;  
   
  str.Format("\n量程上限:%d.0mV       量程下限:%d.0mV\r\n",  
  m_FileHeader.VoltTopRange,   m_FileHeader.VoltBottomRange   );  
  lpstrInfo   +=   str;  
   
  str.Format("通道数:%d\r\n",m_FileHeader.LastChannel   -   m_FileHeader.FirstChannel   +   1);  
          lpstrInfo   +=   str;  
   
  str.Format("首通道:%d           末通道:%d\r\n",m_FileHeader.FirstChannel   ,m_FileHeader.LastChannel   );  
  lpstrInfo   +=   str;  
   
  str.Format("采样频率:%d\r\n",m_FileHeader.Frequency);  
  lpstrInfo   +=   str;  
   
   
  return   lpstrInfo;  
  }  
  导出函数:  
  _declspec(dllexport)     LPCTSTR   GetHeaderInfo(LPCTSTR   lpszFileName)  
  {  
  CTransData   m_TransData(lpszFileName);  
  return   m_TransData.HeaderInfo();  
   
  }  
  在程序中调用时出现乱码(返回值为:葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺葺4),不知是什么问题。调用返回值为ULONG的没有问题。请问应该怎么解决。在线等。 问题点数:20、回复次数:11Top

1 楼Hendy_So(横笛)回复于 2005-04-03 10:25:14 得分 0

m_TransData只是个局部对象,GetHeaderInfo返回后就无效了,返回的指针指向了无效的地址。  
  你可以在GetHeaderInfo增加一个参数,将字符串拷贝到这个参数里。Top

2 楼xuzheng318(忧郁王子)回复于 2005-04-03 10:31:57 得分 0

楼上说得有理!Top

3 楼redkit(ChinaYan)回复于 2005-04-03 12:45:37 得分 0

嗯。局部对象的问题Top

4 楼wenhui1215()回复于 2005-04-04 21:48:37 得分 0

能不能说详细一点,我试了,如果返回CSTRING类型是可以,用LPCTSTR能不能实现Top

5 楼wenhui1215()回复于 2005-04-04 21:49:28 得分 0

能不能说详细一点,我试了,如果返回CSTRING类型是可以,用LPCTSTR能不能实现Top

6 楼wenhui1215()回复于 2005-04-04 21:49:52 得分 0

能不能说详细一点,我试了,如果返回CSTRING类型是可以,用LPCTSTR能不能实现Top

7 楼krh2001(边城浪子)回复于 2005-04-04 21:51:45 得分 5

不如返回   BSTR   类型,   给   VB用正好,跟VB的String十分兼容   :)  
   
  已知楼主用的是MFC:  
   
  这样返回:  
   
  BSTR   Function(...)  
  {  
          CString   str;  
          .....  
          return   str.AllocSysString();  
   
  }Top

8 楼betsyalan(alan)回复于 2005-04-05 09:52:29 得分 10

局部变量的问题,你可以这样定义  
  LPCTSTR   CTransData::HeaderInfo(LPCTSTR   lpStr)  
  {  
  ..  
  return   lpStr;  
  }  
  Top

9 楼signoft(晴天)回复于 2005-04-05 10:21:56 得分 5

局部变量,出栈后变量内存被释放,所以出现乱码;  
  和返回什么类型的变量没有关系,如果你要返回LPCTSTR,  
  按照   betsyalan的方法没问题Top

10 楼signoft(晴天)回复于 2005-04-05 10:22:45 得分 0

或者使用引用也可以Top

11 楼e_bird_winki001()回复于 2005-04-27 15:14:21 得分 0

是局部变量被释放的问题!  
  解决方法:  
  1,将lpstrInfo设置为全局变量  
  2,用CString   作为返回类型(保证内存不被释放)  
  3,把lpstrInfo   放到一个缓冲区中返回:char   buf[1024];strcpy(buf,lpstrInfo.GetBuffer(0));return   buf;  
  4,采用引用  
   
  ok!!!Top

相关问题

  • DLL函数返回字符串
  • 怎么定义字符串的格式。有函数吗?
  • 字符串函数?
  • 字符串函数
  • 【自定义函数】如何返回未知长度的字符串?【一百分】
  • 最多能给这么多分!!!我在写一个dll时定义了一个函数,通过参数返回字符串,不知道有什么问题。
  • 请教一个问题,dll导出函数的一个参数是字符串(字符指针)类型的,请问这个参数类型如何定义?
  • 如何定义一个整型的数组,取得字符串长度、取得字符串左边几个字符串、取得字符串右边几个字符串的函数分别是什么呀?
  • DLL中的函数返回值是字符串变量!
  • dll中的函数如何返回字符串???

关键词

  • lpstrinfo
  • fileheader
  • 返回
  • 类型
  • 局部变量
  • lpctstr
  • 变量
  • 板卡
  • str
  • cstring

得分解答快速导航

  • 帖主:wenhui1215
  • krh2001
  • betsyalan
  • signoft

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo