读书人

VC++ 代码转 Delphi解决办法

发布时间: 2012-03-02 14:40:28 作者: rapoo

VC++ 代码转 Delphi
#include "Shlwapi.h "
STDMETHODIMP CWebOCWindow::BeforeNavigate2(IDispatch *pDisp, VARIANT *URL,
VARIANT *Flags, VARIANT *TargetFrameName,
VARIANT *PostData, VARIANT *Headers,
VARIANT_BOOL *Cancel)
{
if (PostData != NULL && PostData-> vt == (VT_VARIANT|VT_BYREF) && PostData-> pvarVal-> vt != VT_EMPTY )
{

char *szTemp = NULL, *szPostData = NULL;
long plLbound, plUbound;

SAFEARRAY *parrTemp = PostData -> pvarVal-> parray;
SafeArrayAccessData(parrTemp , (void HUGEP **) &szTemp);

SafeArrayGetLBound(parrTemp , 1, &plLbound);
SafeArrayGetUBound(parrTemp , 1, &plUbound);

szPostData = new char[plUbound - plLbound + 2];
StrCpyN(szPostData, szTemp, plUbound - plLbound + 1);
szPostData[plUbound-plLbound] = '\0 ';
SafeArrayUnaccessData(parrTemp);

MessageBox(szPostData);

delete[] szPostData;
}
return S_OK;
}

其实我是想把 WebBrowser 中 BeforeNavigate2 事件中的 PostData 解析出来,
找不到 Delphi 代码,但是找到了 VC++ 代码(这是 MSDN 上的代码)。

哪位高手帮转一下?

[解决办法]
http://www.developpez.net/forums/showthread.php?t=157835
[解决办法]
var
index, lowVal, highVal, vType: integer;
oleArray: PSafeArray;
oleObj: oleVariant;
tmp: string;
begin
if (not (VarIsType(PostData, VT_NULL)) and (VarIsType(PostData, VT_VARIANT) or
VarIsType(PostData, VT_BYREF))) and
(not VarIsType(PostData, VT_EMPTY)) then
begin
index := VarArrayDimCount(PostData);
lowVal := VarArrayLowBound(PostData, index);
highVal := VarArrayHighBound(PostData, index);
oleArray := TVariantArg(PostData).pArray;

for index := lowVal to highVal do
begin
SafeArrayGetElement(oleArray, index, oleObj);
tmp := tmp + VarToStr(oleObj);
end;
ShowMessage(tmp);
end;

读书人网 >.NET

热点推荐