我在本网站上看到过有关此主题的其他链接,但它们没有帮助。如果有人能帮助我,我会非常感激。
我正在阅读使用Visual Studio C ++ 2010表达的WinCrypt API生成的一行加密文本,如下所示:
BSTR element;
HRESULT txt = command_body->get_innerText(&element);
size_t len = SysStringLen(element);
unsigned char * cmds;
cmds = (char *)malloc(len);
int ret = wcstombs(cmds,element,len);
调试器显示element
指向:
"ƒ¦Þ’Î 80:—ÇE³Ž(ùÖðRñ¨5·®•D²Q „× O»C¤ôýdÉùèGñ(åÒ¬¶»“ŽYÞŸÇi‹Bú{l!‹#dŽ "
element
的数据类型为wchar_t *
,但为了进行解密,我需要将其作为char *。使用WinCrypt使用RC4对数据进行加密。
我试过了wcstombs
但根本不起作用。 cmds
中的结果为"[][]"
。
我不确定我做错了什么,但我需要以某种方式将这些数据作为char *
或者我完全错过了一些东西。从我在MSDN上阅读here看来,我似乎需要指定一个新的语言环境。但是我不确定要指定哪个语言环境才能使这些数据有意义......
以下是完整代码:
int main()
{
OleInitialize(NULL);
IWebBrowser2* m_pInetExplorer;
HRESULT hr;
CLSID clsid;
LPUNKNOWN punk=NULL;
CLSIDFromProgID (OLESTR("InternetExplorer.Application"), &clsid);
hr = CoCreateInstance (clsid, NULL, CLSCTX_SERVER, IID_IUnknown, (LPVOID *) &punk);
VARIANT vars[4];
memset(vars,0,sizeof(vars));
BSTR BStrURL = ::SysAllocString(L"http://127.0.0.1:8000/testing.html");
if(SUCCEEDED(hr))
{
punk->QueryInterface (IID_IWebBrowser2, (LPVOID *) &m_pInetExplorer);
punk->Release();
m_pInetExplorer->put_Visible(VARIANT_TRUE);
HRESULT hrie = m_pInetExplorer->Navigate(BStrURL,vars,vars+1,vars+2,vars+3); //Go to webpage
if (SUCCEEDED(hrie))
{
VARIANT_BOOL bBusy = VARIANT_TRUE;
while(bBusy == VARIANT_TRUE)
{
Sleep(500);
m_pInetExplorer->get_Busy(&bBusy);
}
IDispatch* pDisp;
HRESULT test_doc = m_pInetExplorer->get_Document(&pDisp);
if(SUCCEEDED(test_doc))
{
IHTMLDocument2* pHTMLDocument2;
HRESULT hr;
hr = pDisp->QueryInterface( IID_IHTMLDocument2,(void**)&pHTMLDocument2 );
if(SUCCEEDED(hr))
{
IHTMLElement* command_body;
HRESULT get_body = pHTMLDocument2->get_body(&command_body);
if(SUCCEEDED(get_body))
{
BSTR element;
HRESULT txt = command_body->get_innerText(&element);
size_t len = SysStringLen(element);
unsigned char * cmds;
cmds = (char *)malloc(len);
memcpy(cmds,element,len);
}
}
}
}
}
}