C++ ServerSupportFunction向DWORD询问以null结尾的字符串,如何在64位上执行?
我需要调用windows api:C++ ServerSupportFunction向DWORD询问以null结尾的字符串,如何在64位上执行?,c++,delphi,winapi,iis,isapi,C++,Delphi,Winapi,Iis,Isapi,我需要调用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 ); 用德尔福翻译,如: function ( var pfc{: THTTP_FILTER_CONTEXT}; sfReq:
BOOL WINAPI * ServerSupportFunction(
_In_ struct _HTTP_FILTER_CONTEXT *pfc,
_In_ enum SF_REQ_TYPE sfReq,
_In_ PVOID pData,
_In_ DWORD ul1,
DWORD ul2
);
用德尔福翻译,如:
function (
var pfc{: THTTP_FILTER_CONTEXT};
sfReq: DWORD;
pData: Pointer;
ul1, ul2: DWORD): BOOL; stdcall;
winApi文档指出,UL1(DWORD)必须指向可选的以null结尾的字符串,该字符串包含要添加的头。所以我天真地尝试如下(delphi代码):
但是,由于访问权限被破坏,这一点非常糟糕。但由于我使用64位,我不明白Dword(@LUrl[1])
甚至如何作为@return 64位地址工作
那我该怎么办呢?它们是一种强制指针停留在32位空间的方法,以便我可以将其转换为DWORD吗?或者我只是错过了什么?关于ul1
和ul2
的错误。它本身链接到的显示它们实际上是ULONG\u PTR
,而不是DWORD
:
BOOL-WINAPI服务器支持函数(
struct\u HTTP\u FILTER\u CONTEXT pfc,//我刚才是说你的评论应该是一个答案,当你写答案时:)你很好,谢谢来到这里!那么您认为我必须更新delphi Winapi.Isapi2.pas并重写TFilterServerSupportFunctionProc=函数(…ULONG_PTR)吗?是的,需要更新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);