2702|1

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

java 调用DLL 读串口,不久就死了,请帮忙看看什么原因? [复制链接]

经过仔细分析问题出这dll这里,但始终找不到解决办法,请大家帮忙看看,谢谢!
dll代码如下:


JNIEXPORT jstring JNICALL Java_getGPS
(JNIEnv * env, jobject obj)
{
    char * cIpAddress =compressWideChar((LPCWSTR)L"empty value!");
  int baud     = 9600;//BaudTbl[1];
int parity   = 0;//ParityTbl[1];
int databit  = 8;//DataBitTbl[1];
int stopbit  = 0;//StopBitTbl[1];
    //打开串口
if(m_hComm==INVALID_HANDLE_VALUE)
{
  m_hComm=CreateFile(TEXT("COM3:"),GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
  if(m_hComm==INVALID_HANDLE_VALUE )
  {
      cIpAddress =compressWideChar((LPCWSTR)L"COM3 open error!");
      ClosePort();
   return WindowsTojstring(env, cIpAddress);
  }

  GetCommState(m_hComm,&dcb);
  dcb.BaudRate=baud;//BaudRate;
  dcb.ByteSize=databit;//DataBits;
  dcb.Parity=parity;//Parity;
  dcb.StopBits=stopbit;//StopBits;
  dcb.fParity=FALSE;
  dcb.fBinary=TRUE;
  dcb.fDtrControl=0;
  dcb.fRtsControl=0;
  dcb.fOutX=dcb.fInX=dcb.fTXContinueOnXoff=0;
  
  //设置状态参数
  SetCommMask(m_hComm,EV_RXCHAR);  
  SetupComm(m_hComm,16384,16384); //old
  //SetupComm(m_hComm,4096,4096); //new my add
  if(!SetCommState(m_hComm,&dcb))
  {
   //AfxMessageBox(_T("无法按当前参数配置端口,请检查参数!"));
   cIpAddress =compressWideChar((LPCWSTR)L"setup com3 error!");
   PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
   ClosePort();
  // bOpen = FALSE;
   return WindowsTojstring(env, cIpAddress);
  }
      
  //设置超时参数
  GetCommTimeouts(m_hComm,&CommTimeOuts);  
  CommTimeOuts.ReadIntervalTimeout=100;//old
   CommTimeOuts.ReadTotalTimeoutMultiplier=1;//old
   CommTimeOuts.ReadTotalTimeoutConstant=100;//old
  CommTimeOuts.WriteTotalTimeoutMultiplier=0;
  CommTimeOuts.WriteTotalTimeoutConstant=0;  
  if(!SetCommTimeouts(m_hComm,&CommTimeOuts))
  {
   cIpAddress =compressWideChar((LPCWSTR)L"setup Timeout error!");
   PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);
   ClosePort();
   return WindowsTojstring(env, cIpAddress);
  }
   
  PurgeComm(m_hComm,PURGE_TXCLEAR|PURGE_RXCLEAR);

}
//读数据

//下边的代码转化中有出问题
while(m_hComm!=INVALID_HANDLE_VALUE)
{
  BOOL fReadState;
  DWORD dwLength;//,dwBytesRead;
  char* buf=new char[256];//256
     int length=256;//256
        
   fReadState=ReadFile(m_hComm,buf,length,&dwLength,NULL);//从串口读数
   if(fReadState)
   {   
       cIpAddress = NULL;
       cIpAddress = buf;                    
      }
     jstring str = WindowsTojstring(env, cIpAddress);//我估计问题出在这里 WindowsTojstring()是用于UNICODE转ANSI    delete []buf;
    delete buf;
    delete cIpAddress;
   // ClosePort();
    return str;
   
   }
   else
   {
     jstring str = WindowsTojstring(env, cIpAddress);
   
    delete []buf;
    delete buf;
    delete cIpAddress;
   // ClosePort();
    return str;
   }
  
}
        
ClosePort();
return WindowsTojstring(env, cIpAddress);
}

//UNICODE转ANSI    
jstring WindowsTojstring( JNIEnv* env, char* str )
{
jstring rtn = 0;
int slen = strlen(str);
wchar_t* buffer = 0;
if( slen == 0 )
  rtn = env->NewStringUTF( str ); //UTF ok since empty string
else
{
  
  int length = MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, NULL, 0 );//old
  buffer = (wchar_t*)malloc( length*2 + 1 );//old
  if( MultiByteToWideChar( CP_ACP, 0, (LPCSTR)str, slen, (LPWSTR)buffer, length ) >0 )
   rtn = env->NewString( (jchar*)buffer, length );

}
if( buffer )
{
  free( buffer );
        delete buffer;
}
return rtn;
}
本文来自Tony嵌入式论坛,原文地址:http://www.cevx.com/bbs/viewthread.php?tid=20228

最新回复

没人回答!  详情 回复 发表于 2009-6-2 14:20
点赞 关注

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
没人回答!
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表