我的定义如下
这是定义的一个类的成员函数:
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的没有问题。请问应该怎么解决。在线等。

解决方案 »

  1.   

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

  2.   

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

  3.   

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

  4.   

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

  5.   

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

  6.   

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

  7.   

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

  8.   

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