Pos関数について

解決


haru  2015-02-05 01:40:16  No: 47026

すみません、宜しくお願いいたします。

delphi2005で使用してたソースなのですが、delphixe5ではコンパイルエラーになります。何がいけないのでしょう?
os、windows7 64bit

以下ソース

概要はUDLファイルからDBのパスを取得のようですが、
私、理解できてないです。

function M_GetDBPathFromUDL(const strUDL : string): String;
var
  strTarget : string;
  wstrSet   : WideString;
  f         : TFileStream;
  intStart  : Integer;
  intEnd    : Integer;
begin
  Result := '';

  if not FileExists(strUDL) then exit;

  f := TFileStream.Create(strUDL, fmOpenRead);
  try
    SetLength(wstrSet, f.Size);
    f.Read(wstrSet[1], f.Size);
  finally
    f.Free;
  end;

  intStart  := Pos('Source=', wstrSet) + 7;    ←エラー箇所
  intEnd    := Pos(';Persist', wstrSet);       ←エラー箇所
  strTarget := Copy(wstrSet, intStart, intEnd - intStart);
  Result    := strTarget;
end;

以下エラーメッセージ

[dcc32 エラー] aaFunc.pas(748): E2251 'Pos' へのオーバーロード呼び出しはあいまいです
  System.pas(29784): 関連メソッド: function Pos(const string; const string; Integer): Integer;
  System.pas(29944): 関連メソッド: function Pos(const WideString; const WideString; Integer): Integer;

宜しくお願いいたします。


通りすがり  2015-02-05 03:30:52  No: 47027

XE5では(2009以降では)WideStringは単なるString=UnicodeStringに置き換えてOKですというか
置き換えてください。


通りすがり  2015-02-05 03:39:34  No: 47028

あー、よく見たらコンパイルエラーは出ていなくても、ファイルの読み込みがうまくないですね。

function M_GetDBPathFromUDL(const strUDL : string): String;
var
  strTarget : string;
  strSet    : string;
  f         : TFileStream;
  intStart  : Integer;
  intEnd    : Integer;
begin
  Result := '';

  if not FileExists(strUDL) then exit;

  f := TFileStream.Create(strUDL, fmOpenRead);
  try
    SetLength(strSet, f.Size div SizeOf(Char));
    f.Read(PChar(strSet), f.Size);
  finally
    f.Free;
  end;

  intStart  := Pos('Source=', strSet) + 7;
  intEnd    := Pos(';Persist', strSet);
  strTarget := Copy(strSet, intStart, intEnd - intStart);
  Result    := strTarget;
end;

ファイルはUTF-16(BOMなし)で記録されているんですよね?

ANSI版(2007およびそれ以前)からUnicode版(2009およびそれ以降)にポーティングするときは
文字列の扱いを(基本的に)全て見直す必要があります。Embarcaderoの公式サイトにも
DEKOさんのところにもいろいろ資料がありますので、一通り目を通されたほうがよいかと。


haru  2015-02-05 23:38:17  No: 47029

コンパイルエラー、なくなりました。

その他色々と教えていただいた事を、これから勉強していきます。

ご回答いただきましてありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加