我需要调用windows api:
BOOL WINAPI * ServerSupportFunction(
_In_ struct _HTTP_FILTER_CONTEXT *pfc,
_In_ enum SF_REQ_TYPE sfReq,
_In_ PVOID pData,
_In_ DWORD ul1,
DWORD ul2
);
https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ff827495(v=vs.85)
这在delphi中是这样翻译的:
function (
var pfc{: THTTP_FILTER_CONTEXT};
sfReq: DWORD;
pData: Pointer;
ul1, ul2: DWORD): BOOL; stdcall;
winApi医生说
UL1(DWORD)必须指向一个可选的以空结尾的字符串
其中包含要添加的标头。所以我天真地尝试这样(delphi代码):
Var LUrl: ansiString;
LUrl := 'Location: https://myserver'+#13#10#13#10
pfc.ServerSupportFunction(
pfc, // var pfc{: THTTP_FILTER_CONTEXT};
SF_REQ_SEND_RESPONSE_HEADER, // sfReq: DWORD
PANSIchar('307 Temporary Redirect'), // pData: Pointer
Dword(@LUrl[1]), // ul1: DWORD
0);
但这在访问违规方面惨遭失败。但当我使用64位时,我不明白如何
Dword(@LUrl[1])
甚至可以作为@return 64位地址使用
那我该怎么办?它们是否是一种强制指针保持在32位空间的方法,以便我可以将其转换为DWORD?还是我只是错过了什么?