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

 

    摘要: 求利用swing,awt编写的操作数据库的界面的例子,急!非常感谢!!!!!! 可运行 我的邮箱:csx_leony@263.net 提示也行,谢谢 ......
    摘要: 有谁知道偷偷地向函数传递this指针? 比如说,我把本来是一个类方法的函数变成普通函数,但是里头还是使用了this指针,怎么办? ......


调用VC写的dll的问题,在线等待,请高手帮忙

一个VC写的dll中的函数,声明如下:  
      WORD   SLE4442_ReadPWD(  
  BYTE   *_bPWD  
  );  
  参数  
  _bPWD    
  字符型指针,指向从卡片内读到的密码并返回给应用程序。在HEXADECIMAL模式下,应用程序应确保在调用此函数前,已分配给_bPWD指针至少3个字节的空间;在ASCIISTRING模式下,应确保已分配给_bPWD指针至少6个字节的空间。    
   
      WORD   MCS_SetStringMode(  
  BYTE   _bStringMode,  
  );  
     
  参数  
  _bStringMode    
  设置随后操作的字符串传递方式:    
   
  常量   值   含义    
  HEXADECIMAL   0   16进制字符串    
  ASCIISTRING   1   ASCII字符串    
   
   
  我的程序:  
   
  function   MCS_SetStringMode(_StringMode:   BYTE):   WORD;  
      stdcall;   external   MCS_SR.DLL;  
   
  function   SLE4442_ReadPWD(   _bPWD:PChar):   WORD;  
      stdcall;   external   MCS_SR.DLL;  
   
  procedure   TForm1.Button5Click(Sender:   TObject);  
  var  
    Pass:pchar;  
    S:string;  
  begin  
      Pass:=StrAlloc(4*sizeof(Char));  
   
      case   MCS_SetStringMode(0)   of  
          0:   Showmessage(设置成功!);  
          else     Showmessage(设置失败!);  
      end;  
   
      case   SLE4442_ReadPWD(Pass)   of  
          0:     begin  
                      Showmessage(密码读取成功!);  
                      S:=Pass;  
                      StrDispose(Pass);  
                      Label1.Caption:=S;  
                  end;  
          else   Showmessage(密码读取失败!);  
      end;  
  end;  
   
  程序运行后函数都能返回0,说明调用成功,但读出来的密码是,请高手指教,万分感谢!

NO.1   作者: 76liujing

function   SLE4442_ReadPWD(   _bPWD:PChar):   WORD  
  应该是function   SLE4442_ReadPWD(var   _bPWD:PChar):   WORD  
  这样才能把_bPWD的值带出来  
 

NO.2   作者: hexenzhou

不对,PChar是指向Char的指针,利用指针传递参数是不需要加Var指示字,问题出在PChar的类型不可以直接赋值给String类型,而String类型通过强制类型转换却可以赋值给PChar类型。因此上述代码应改成下列方式:  
  procedure   TForm1.Button5Click(Sender:   TObject);  
  var  
    Pass:pchar;  
    S:string;  
  begin  
      Pass:=StrAlloc(4*sizeof(Char));  
      SetLength(S,   4);  
   
      case   MCS_SetStringMode(0)   of  
          0:   Showmessage(设置成功!);  
          else     Showmessage(设置失败!);  
      end;  
   
      case   SLE4442_ReadPWD(Pass)   of  
          0:     begin  
                      Showmessage(密码读取成功!);  
                      Move(Pass^,   S[1],   4);    
                      StrDispose(Pass);  
                      Label1.Caption:=S;  
                  end;  
          else   Showmessage(密码读取失败!);  
      end;  
  end;  
 

NO.3   作者: da_yu

关注

NO.4   作者: haohaisen

up

NO.5   作者: ljmanage

应该是function   SLE4442_ReadPWD(var   _bPWD:^Byte):   WORD  
 

NO.6   作者: hacking

type   p=^byte;  
  function   SLE4442_ReadPWD(var   _bPWD:p):   WORD  
  就没问题了  
 

NO.7   作者: belllab

常量   值   含义    
  HEXADECIMAL   0   16进制字符串    
  ASCIISTRING   1   ASCII字符串    
    case   MCS_SetStringMode(0)   of  
  是不是这里的问题?

NO.8   作者: Focus

你没有写这个SLE4442_ReadPWD的定义  
  试试这两种  
  case   SLE4442_ReadPWD(@Pass)   of  
          0:     begin  
                      Showmessage(密码读取成功!);  
                      S:=Pass;  
                      StrDispose(Pass);  
                      Label1.Caption:=S;  
                  end;  
          else   Showmessage(密码读取失败!);  
      end;  
  把指针地址传入  
  或者  
  case   SLE4442_ReadPWD(Pass^)   of  
  把指针所指向的内存地址传入  
 

NO.9   作者: hacking

一个VC写的dll中的函数,声明如下:  
      WORD   SLE4442_ReadPWD(  
  BYTE   *_bPWD  
  );  
  参数  
  _bPWD    
  字符型指针,指向从卡片内读到的密码并返回给应用程序。在HEXADECIMAL模式下,应用程序应确保在调用此函数前,已分配给_bPWD指针至少3个字节的空间;在ASCIISTRING模式下,应确保已分配给_bPWD指针至少6个字节的空间。    
   
      WORD   MCS_SetStringMode(  
  BYTE   _bStringMode,  
  );  
     
  参数  
  _bStringMode    
  设置随后操作的字符串传递方式:    
   
  常量   值   含义    
  HEXADECIMAL   0   16进制字符串    
  ASCIISTRING   1   ASCII字符串    
   
   
  我的程序:  
  type   pbyte=^byte  
  function   MCS_SetStringMode(_StringMode:   BYTE):   WORD;  
      cedcl;   external   MCS_SR.DLL;  
   
  function   SLE4442_ReadPWD(   _bPWD:pbyte):   WORD;  
      cedcl;   external   MCS_SR.DLL;  
   
  procedure   TForm1.Button5Click(Sender:   TObject);  
  var  
    Pass:pchar;  
    S:string;  
  begin  
      Pass:=StrAlloc(4*sizeof(Char));  
   
      case   MCS_SetStringMode(0)   of  
          0:   Showmessage(设置成功!);  
          else     Showmessage(设置失败!);  
      end;  
   
      case   SLE4442_ReadPWD(Pass)   of  
          0:     begin  
                      Showmessage(密码读取成功!);  
                      S:=Pass;  
                      StrDispose(Pass);  
                      Label1.Caption:=S;  
                  end;  
          else   Showmessage(密码读取失败!);  
      end;  
  end;

NO.10   作者: nnfish

关注

NO.11   作者: nyf1220

dll  
  不会,关注


    摘要: 呵呵 ......
» 本期热门文章:

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