我目前正在为 ISS Handler 将 Delphi 应用程序转换为 C#。Delphi 使用这些内存类(TMemoryStream、TStreamAdapter)传递给方法、插入字符串值以及从内存中返回和检索值。我的问题是,我是否真的需要创建内存对象来插入字符串值并将它们传递给检索方法,或者这只是 Delphi 处理程序独有的。目前我只是在我的 ISS 处理程序中传递和检索字符串值,这将是一种正确的转换。我研究过,结果很短。非常感谢您的帮助。
例如德尔福代码:
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。据我所知。这是必要的吗?为什么有人会这样做?