私は現在、Delphi アプリケーションを ISS Handler 用の C# に変換しています。Delphi は、これらのメモリ クラス (TMemoryStream、TStreamAdapter) を使用して、メソッドに渡し、文字列値を挿入し、メモリから値を返したり取得したりします。ここでの質問は、メモリ オブジェクトを作成して文字列値を挿入し、メソッドを介して取得する必要があるのか、それとも Delphi ハンドラに固有のものなのかということです。現在、ISS ハンドラーで文字列値を渡したり取得したりしていますが、これは一種の正しい変換になります。私は調査し、不足しました。どうぞよろしくお願いいたします。
たとえば、Delphi コードの場合:
m := TMemoryStream.Create;
iss := TStreamAdapter.Create(m, soOwned);
iss._AddRef;
try
hr := CAGetPath(cas, cam, cal, iss);
cb := 0;
m.Write(cb, sizeof(WideChar));
s := PWideChar(m.Memory);
finally
iss._Release;
end;
function CAGetPath(SubscriberID, MailshotID, LinkID: integer;
stmPath: ISequentialStream): HRESULT; stdcall;
{
sPath: WideString;
sPath := "\\MYPATH\\TO\\FOLDER"
stmPath._AddRef;
cb := length(sPath) * sizeof(WideChar);
ES := 'stmPath.Write(' + sPath + ')';
Result := stmPath.Write(PWideChar(sPath), cb, nil);
}
この Delphi コードのビットは、文字列を返し、それを変数 s に設定するだけです。私が知る限り。これは必要であり、なぜ誰かがこのようにするのでしょうか?