!CHtmlView加了 NewWindow3,网址参数乱码
救命啊!CHtmlView加了 NewWindow3,网址参数乱码
我在继承CHtmlView类的浏览器中加了NewWindow3时间,想获取在新窗口打开的网址,
但是获取到的网址全部都是乱码,请教高手这是怎么回事呢??怎么可以解决??
class CWebViewCtrlView : public CHtmlView
void CWebViewCtrlView::NewWindow3(
IDispatch *ppDisp,
VARIANT_BOOL *Cancel,
DWORD dwFlags,
BSTR bstrUrlContext, //这里乱码
BSTR bstrUrl //这里乱码
)
{
USES_CONVERSION;
string strurl = OLE2T(bstrUrl); //这里乱码
string strUrlContext = OLE2T(bstrUrlContext); //这里乱码
}
请教高手这是怎么回事呢??怎么可以解决??
把分全给了,大家帮帮忙啊
------解决方案--------------------
传进来的时候已经是乱码了吗?意思就是在函数开始时中断,查看变量的值的时候
------解决方案--------------------
是的,传进来的时候就是乱码了
------解决方案--------------------
逆向跟踪一下,即在NewWindow3被调用之前就应该设置断点,再查看变量值在哪里变成乱码的
------解决方案--------------------
查过的
在NewWindow3前一个函数
__declspec(naked) void AFXAPI
_AfxDispatchCall(AFX_PMSG /*pfn*/, void* /*pArgs*/, UINT /*nSizeArgs*/)
{
_asm
{
pop edx // edx = return address
pop eax // eax = pfn
pop ecx // ecx = pArgs
add ecx,[esp] // ecx += nSizeArgs (=scratch area)
mov [ecx],edx // scratch[0] = return address
sub ecx,[esp] // ecx = pArgs (again)
mov esp,ecx // esp = pArgs (usually already correct)
pop ecx // ecx = this pointer (the CCmdTarget*)
call eax // call member function
ret // esp[0] should = scratch[0] = return address
}
}
执行AfxDispatchCall后是NewWindow3,
执行AfxDispatchCall前数据是对的
------解决方案--------------------
我晕,能不能再靠前一点,通过调用栈找个不是汇编的地方,实际上我是想看pArgs参数的内容
------解决方案--------------------
前面的数据没看出什么异常,前面的所有函数没有pArgs参数的啊
------解决方案--------------------
至少该有个Invoke的调用,因为这是浏览器控件对连接点调用的起点,而这个Invoke是CHtmlView实现的方法,找到这个方法就要关注DISPPARAMS参数,里面存放着所有的传入参数,当然包括URL
------解决方案--------------------
pop ecx // ecx = pArgs
这个值为0的
------解决方案--------------------
恩,Invoke的时候数据都是正常的,到了下面OnEvent的时候参数都还是正确的
------解决方案--------------------
你得跟踪到数据变成乱码的地方,看看到底是什么语句造成的。猜测还是你自己的代码有问题,我从未遇到过这种错误。
------解决方案--------------------
我的代码很简单的,
你的邮箱是多少,我把代码发给你看看是不是那里定义错误了!
------解决方案--------------------
我的邮箱:nanfangyueliang@163.com
方便的话能不能把你的那个没有错误的代码给我看看是怎么回事??
我在继承CHtmlView类的浏览器中加了NewWindow3时间,想获取在新窗口打开的网址,
但是获取到的网址全部都是乱码,请教高手这是怎么回事呢??怎么可以解决??
class CWebViewCtrlView : public CHtmlView
void CWebViewCtrlView::NewWindow3(
IDispatch *ppDisp,
VARIANT_BOOL *Cancel,
DWORD dwFlags,
BSTR bstrUrlContext, //这里乱码
BSTR bstrUrl //这里乱码
)
{
USES_CONVERSION;
string strurl = OLE2T(bstrUrl); //这里乱码
string strUrlContext = OLE2T(bstrUrlContext); //这里乱码
}
请教高手这是怎么回事呢??怎么可以解决??
把分全给了,大家帮帮忙啊
------解决方案--------------------
传进来的时候已经是乱码了吗?意思就是在函数开始时中断,查看变量的值的时候
------解决方案--------------------
是的,传进来的时候就是乱码了
------解决方案--------------------
逆向跟踪一下,即在NewWindow3被调用之前就应该设置断点,再查看变量值在哪里变成乱码的
------解决方案--------------------
查过的
在NewWindow3前一个函数
__declspec(naked) void AFXAPI
_AfxDispatchCall(AFX_PMSG /*pfn*/, void* /*pArgs*/, UINT /*nSizeArgs*/)
{
_asm
{
pop edx // edx = return address
pop eax // eax = pfn
pop ecx // ecx = pArgs
add ecx,[esp] // ecx += nSizeArgs (=scratch area)
mov [ecx],edx // scratch[0] = return address
sub ecx,[esp] // ecx = pArgs (again)
mov esp,ecx // esp = pArgs (usually already correct)
pop ecx // ecx = this pointer (the CCmdTarget*)
call eax // call member function
ret // esp[0] should = scratch[0] = return address
}
}
执行AfxDispatchCall后是NewWindow3,
执行AfxDispatchCall前数据是对的
------解决方案--------------------
我晕,能不能再靠前一点,通过调用栈找个不是汇编的地方,实际上我是想看pArgs参数的内容
------解决方案--------------------
前面的数据没看出什么异常,前面的所有函数没有pArgs参数的啊
------解决方案--------------------
至少该有个Invoke的调用,因为这是浏览器控件对连接点调用的起点,而这个Invoke是CHtmlView实现的方法,找到这个方法就要关注DISPPARAMS参数,里面存放着所有的传入参数,当然包括URL
------解决方案--------------------
pop ecx // ecx = pArgs
这个值为0的
------解决方案--------------------
恩,Invoke的时候数据都是正常的,到了下面OnEvent的时候参数都还是正确的
------解决方案--------------------
你得跟踪到数据变成乱码的地方,看看到底是什么语句造成的。猜测还是你自己的代码有问题,我从未遇到过这种错误。
------解决方案--------------------
我的代码很简单的,
你的邮箱是多少,我把代码发给你看看是不是那里定义错误了!
------解决方案--------------------
我的邮箱:nanfangyueliang@163.com
方便的话能不能把你的那个没有错误的代码给我看看是怎么回事??