【发布时间】:2015-05-28 19:43:17
【问题描述】:
我继承了一个使用 CppWebBrowser 控件的旧应用程序。
该应用程序一直使用 ::Navigate 方法进行 GET 请求,但现在我需要开始将其用于 POST;但是,现有代码不适用于 POST。我对使用这些数据类型的知识有限,但我怀疑它与 CString 到 VT_ARRAY|VT_UI1 的转换有关。
void WebPostData(TCppWebBrowser *CppWebBrowser, CString sURL, CString sPostData)
{
BSTR bstrHeaders = NULL;
TVariant vFlags = { 0 }, vTargetFrameName = { 0 }, vPostData = { 0 }, vHeaders = { 0 };
LPSAFEARRAY psa;
LPCTSTR cszPostData = sPostData;
UINT cElems = lstrlen(cszPostData);
LPSTR pPostData;
LPVARIANT pvPostData;
bstrHeaders = SysAllocString(L"Content-Type: application/x-www-form-urlencodedrn");
if (!bstrHeaders){
Application->MessageBox("Could not allocate bstrHeaders", "Warning", MB_OK | MB_ICONWARNING);
return;
}
V_VT(&vHeaders) = VT_BSTR;
V_BSTR(&vHeaders) = bstrHeaders;
pvPostData = vPostData;
if (pvPostData){
VariantInit(pvPostData);
psa = SafeArrayCreateVector(VT_UI1, 0, cElems);
if (!psa){
return;
}
SafeArrayAccessData(psa, (LPVOID*)&pPostData);
memcpy(pPostData, cszPostData, cElems);
SafeArrayUnaccessData(psa);
V_VT(pvPostData) = VT_ARRAY | VT_UI1;
V_ARRAY(pvPostData) = psa;
}
CppWebBrowser->Navigate((TVariant)sURL, &vFlags, &vTargetFrameName, &vPostData, &vHeaders);
}
【问题讨论】:
-
this 有帮助吗?
-
我想你有一个 Unicode 版本(可能不是,尤其是它是遗留项目),在这种情况下,
CString值将是 Unicode 字符串,并且你需要 ASCII 或 UTF-8 来表示 @ 987654324@ing 到字节数组中。 -
那篇文章看起来就像原始开发人员复制代码的确切位置,只是他们将 sPostData 参数从 String 更改为 CString。此外,关于那篇文章的一些 cmets 声明它不适用于帖子。