当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: 请教一个关于cstring* str指针内存释放的问题,应该怎么写呀! 我写的如下: if(str != null) { delete str; // 为什么到这一步就错了亚! str = null; } ......
    摘要: 本人以前一直都用sql server,也玩个db2,现在做一个项目要用oracle,不知是我不懂的用还是orace确实就是这样,利用plus/sql执行sql搞的我好烦躁,没想到这就是全球最好的数据库,操作这么烂,在plus一些常用的编辑手段在这统统靠边站,也不想想人家sql server的查询分析器有多方便,感觉用sql server和oracle就好象一个用c一个用汇编,照这种操作我用......


Delphi与C语言做的dll文件的兼容性问题

C语言做的动态链接库(Trsbp.dll),通过调用相应的函数完成c/s间的数据交换.  
  内含函数:int     TRSbp_cmd(TRS_CMD   *trs_cmd,TRS_RESULT   *trs_result);  
  功能简介:执行不同的命令,实现数据上传或下传  
  主要参数:trs_cmd──命令结构体,trs_result──结果结构体。  
  返回值:1--成功,0-失败  
   
  命令结构体TRS_CMD  
  定义  
  typedef   struct   trs_cmd  
  {  
  char CmdId;  
  char CmdLen[4+1];  
  char *CmdBuf;  
  }TRS_CMD;  
  说明  
  参数 含义                   说明  
  CmdId 命令ID号  
  CmdLen 命令字节数 字符串表示的4位整形数,不足4位,左侧加‘0’。例如:字节数为8,表示为‘0008’  
  CmdBuf 命令内容                 具体内容根据不同命令格式不一,每个参数之间以‘\t’作为分割符。  
   
   
  结果结构体TRS_RESULT  
   
  定义  
  typedef   struct   trs_result  
  {  
  char Status;  
  char Rows[4+1];  
  char Cols[4+1];  
  char ResultLen[8+1];  
  char *ResultBuf;  
  }TRS_RESULT;  
  说明  
  参数 含义                 说明  
  Status 结果状态               ‘1’表示成功,结果内容中为返回的实际结果。‘0’执行命令过程中有错误发生,结果内容中为返回的错误信息描述。  
  Rows 结果行数                   字符串表示的4位整形数,不足4位,左侧加‘0’。  
  Cols 结果字段数 字符串表示的4位整形数,不足4位,左侧加‘0’。  
  ResultLen 结果字节数 仅为结果内容的字节数,不足8位,左侧加‘0’。  
  ResultBuf 结果内容               返回数据每条记录之间用‘\n’分割,字段之间用‘\t’分割。  
   
   
  请问:用Delphi调用dll文件时,CmdBuf 命令内容     怎么输入呀?  
  为什么我这样输入的时候运行总是报错呀:  
          pcmd.Cmdid   :=   4;  
          pcmd.cmdlen   :=   0013;  
          pcmd.Cmdbuf   :=   123+#9+上午+#9+下午;  
  而当命令ID号为1,命令字节数为0,命令内容为空时:  
          pcmd.Cmdid   :=   1;  
          pcmd.cmdlen   :=   0000;  
          pcmd.Cmdbuf   :=   ;  
  却能够正确运行啊?!

NO.1   作者: Eastunfail

可能是  
  char *ResultBuf  
  你的:  
  pcmd.Cmdbuf   :=   123+#9+上午+#9+下午;  
  在分配内存之前就强行符值的问题  
   
  你的TRS_RESULT在D中怎么定义的?

NO.2   作者: edisonwong

这样定义试试  
  prs_Cmd   =   ^TRS_CMD;  
          TRS_CMD   =   record  
          Cmdid   :   Char;  
          cmdlen:   array[0..3]   of   char;  
          Cmdbuf:   pChar;  
      end;  
      prs_result   =   ^Trs_result;  
      Trs_result   =   record  
          status   :   Char;  
          rows       :   array[0..4]   of   Char;  
          cols       :   array[0..4]   of   char;  
          ResultLen:   array[0..8]   of   char;  
          resultBuf:   PChar;  
      end;  
  var  
      Cmdbuf:array[0..200]   of   char;  
      resultBuf:array[0..200]   of   char;  
   
  声明变量rs_Cmd,rs_result  
  rs_cmd.Cmdbuf:=@CmdBuf  
  rs_result.ResultBuf:=@ResultBuf  
   
          pcmd.Cmdid   :=   4;  
          pcmd.cmdlen   :=   0013;  
          StrCpy;  
 


    摘要: 哪个画图软件可以画系统原理图或接线图比较好,比方说画一个局域网,要画出电脑背后的接口和交换机的接线 ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE