不知道为什么,一个正常的string类型转换成PCHAR后有字符变成其他的了,or 变成‘#0#0’
兄弟们有没有遇到过啊

解决方案 »

  1.   

     var
      ADatabase, AServerName, ALoginName, APassword: string;
      AConnectString: string;   AConnectString := Format('Provider=SQLOLEDB.1;Password=%s;Persist Security ' +
          'Info=True;User ID=%s;Initial Catalog=%s;Data Source=%s', [APassword, ALoginName,
          AServerName, ADatabase]);  Result := StrPCopy(AConnectString);
      

  2.   

    function GetConnectString: Pchar;
    var
      ADatabase, AServerName, ALoginName, APassword: string;
      AConnectString: string;
    begin
      AConnectString := '';
      ADatabase := GetSoftVariable(Pchar('Database'));
      AServerName := GetSoftVariable(Pchar('ServerName'));
      ALoginName := GetSoftVariable(Pchar('LoginName'));
      APassword := GetSoftVariable(Pchar('Password'));  if (ADatabase <> '') and (AServerName <> '') and (ALoginName <> '') then
        AConnectString := Format('Provider=SQLOLEDB.1;Password=%s;Persist Security ' +
          'Info=True;User ID=%s;Initial Catalog=%s;Data Source=%s', [APassword, ALoginName,
          AServerName, ADatabase]);  Result := PChar(AConnectString);
    end;
    AConnectString 经过PChar函数转换后就不对了
      

  3.   

    把AConnectString 定义成全局变量,或者返回值改成String这里AConnectString 是函数内部变量,函数返回后, 变量释放了。
    而程序返回的是个指针,指向AConnectString 的指针,所以,函数结束返回的内容是不对的。
      

  4.   

    我上面的代码其实是通过DLL,返回连接字符串
      

  5.   

     日志-病毒-网络-操作系统-安全-c#-asp.net-java-delphi-sql-oracle学习资源
     在这里可以找找http://japee.com.cn/jew/bbs.aspx
      

  6.   


    如果是dll,那这样使用更好:function GetConnectString(buf:Pchar):boolean;
    ...........
    StrPCopy(buf,AConnectString);把串拷贝到buf中,buf由主程序来申请并管理。
      

  7.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}function GetConnectString: Pchar;
    var
      ADatabase, AServerName, ALoginName, APassword: string;
    begin
      ADatabase := StrPas(Pchar('10.137.199.235'));
      AServerName := StrPas(Pchar('ESSoftDB'));
      ALoginName := StrPas(Pchar('sa'));
      APassword := StrPas(Pchar('bachelor'));
      if (ADatabase <> '') and (AServerName <> '') and (ALoginName <> '') then begin
        Result := Pchar(Format('Provider=SQLOLEDB.1;Password=%s;Persist Security ' +
          'Info=True;User ID=%s;Initial Catalog=%s;Data Source=%s', [APassword,
          ALoginName, AServerName, ADatabase]));
        ShowMessage(Result)
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      a: string;
    begin
      a := GetConnectString;
      ShowMessage(a);
    end;
    end.
      

  8.   

    上面的例子 ShowMessage(Result) 正常,ShowMessage(a); 不正常
      

  9.   


    unit Unit1; interface uses 
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
      Dialogs, StdCtrls; type 
      TForm1 = class(TForm) 
        Button1: TButton; 
        procedure Button1Click(Sender: TObject); 
      private 
        { Private declarations } 
      public 
        { Public declarations } 
      end; var 
      Form1: TForm1; implementation {$R *.dfm} function GetConnectString: {Pchar既然接收使用的是String,这里就直接返回String}String; 
    var 
      ADatabase, AServerName, ALoginName, APassword: string; 
    begin 
      ADatabase := '10.137.199.235'; //这就是一个String不需要转
      AServerName := 'ESSoftDB'; 
      ALoginName := 'sa'; 
      APassword := 'bachelor'; 
      if (ADatabase  <> '') and (AServerName  <> '') and (ALoginName  <> '') then begin 
        Result := Format('Provider=SQLOLEDB.1;Password=%s;Persist Security ' + 
          'Info=True;User ID=%s;Initial Catalog=%s;Data Source=%s', [APassword, 
          ALoginName, AServerName, ADatabase])); //Format返回的也是一个String
        ShowMessage(Result) 
      end; 
    end; procedure TForm1.Button1Click(Sender: TObject); 
    var 
      a: string; 
    begin 
      a := GetConnectString; 
      ShowMessage(a); 
    end; 
    end.
      

  10.   

    1.ADatabase它就是一個string;
    2.format處理後也是一個string。
    綜上:不需要pchar來convert,直接string...