0

背景: 自分のコードを Delphi 10.1 Berlin に移植し、サード パーティのライブラリを使用しています。一部は利用できなくなったので、コードを修正しようとします...

次のコード (プログラムの 1 つのインスタンスから別のインスタンスにパラメーターを渡す) では、E2251 あいまいなオーバーロードされた StrLen 呼び出しが発生します。理由はわかりますが、それを解決する最善の方法がわかりません。

type
  PInstInfo = ^TInstInfo;
  TInstInfo = packed record
    FirstInstanceWnd:HWND;
    ParamCount:Integer;
    Params:Array[0..MAX_PARAMS-1, 0..MAX_PARAM_SIZE] of Char;
  end;

// Memory is filled with:
 lpInfo^.ParamCount:=ParamCount;
 if lpInfo^.ParamCount>MAX_PARAMS then
  lpInfo^.ParamCount:=MAX_PARAMS;
 for i:=0 to lpInfo^.ParamCount-1 do
 begin
  tempStr:=ParamStr(i+1);
  if length(tempStr)>MAX_PARAM_SIZE then
   setLength(tempStr,MAX_PARAM_SIZE);
  StrCopy(@(lpInfo^.Params[i,0]),PChar(tempStr));
 end;
 // and notify the first instance
 PostMessage(lpInfo^.FirstInstanceWnd, MSG_2ND_INSTANCE, 0, 0);



// And read using:
   if lpInfo <> nil then
   try
    // get Parameters
    params:=TStringList.Create;
    try
     for i:=0 to lpInfo^.ParamCount-1 do
     begin
      SetString(tempStr,
       PChar(@(lpInfo^.Params[i,0])),
       StrLen(@(lpInfo^.Params[i,0])));  <--- E2251 Ambiguious overloaded call to StrLen
      params.Add(tempStr);
     end;
     InstanceStarted(params);
    finally
     params.Free;
    end;

ありがとう

4

1 に答える 1