这几天改写一个表单提交程序,用于控制一台基于网页管理的设备,原来是一个MBCS的支持MFC的控制台应用程序,可以正常使用。不过想到打包MFC后安装包太大了,而功能本来很简单,于是设法将其改为API程序;同时想到支持中英文界面,于是建立项目后将字符集设为了UNICODE。
经过繁琐的代码修改后,调试了很长时间才得到返回的HTML (我发现原来在WINSOCKEXPERT中可以监视IE中的应答数据包,但监视该程序却总是失败,为什么?)。这时我却大吃一惊:所有的数据传送都是正常的,设备却不动作!由于无法看到数据包到底有何不同,就以为是API方式与MFC方式的差异,返回原来的程序改成静态链接MFC,在解决了一些符号冲突后,终于链接成功。但问题却依旧!两天之后偶然想到把字符集改回单字符集,设备控制就成功了。 显然,问题出在 MBCS 与 UNICODE 方式 WININET 提交的表单数据上面?
经过繁琐的代码修改后,调试了很长时间才得到返回的HTML (我发现原来在WINSOCKEXPERT中可以监视IE中的应答数据包,但监视该程序却总是失败,为什么?)。这时我却大吃一惊:所有的数据传送都是正常的,设备却不动作!由于无法看到数据包到底有何不同,就以为是API方式与MFC方式的差异,返回原来的程序改成静态链接MFC,在解决了一些符号冲突后,终于链接成功。但问题却依旧!两天之后偶然想到把字符集改回单字符集,设备控制就成功了。 显然,问题出在 MBCS 与 UNICODE 方式 WININET 提交的表单数据上面?
wchar_t wszStr[] = L"This is a test";
String* str = S”This is a test”; 方法三,使用ATL 7.0的转换宏和类。ATL7.0在原有3.0基础上完善和增加了许多字符串转换宏以及提供相应的类,它具有如图3所示的统一形式: 其中,第一个C表示“类”,以便于ATL 3.0宏相区别,第二个C表示常量,2表示“to”,EX表示要开辟一定大小的缓冲。SourceType和DestinationType可以是A、T、W和OLE,其含义分别是ANSI、Unicode、“一般”类型和OLE字符串。例如,CA2CT就是将ANSI转换成一般类型的字符串常量。下面是一些示例代码:LPTSTR tstr= CA2TEX<16>("this is a test");
LPCTSTR tcstr= CA2CT("this is a test");
wchar_t wszStr[] = L"This is a test";
char* chstr = CW2A(wszStr);
VC/MFC 网络编程问题
URL为:http://expert.csdn.net/Expert/ForumList.asp?typenum=1&Roomid=5004你的程序用WININET发送请求后,服务器有响应,不过是进入到了
http://expert.csdn.net/Expert/ForumList.asp
的默认页面,即
数字参数不允许为空!!()后面的表单数据没有效。这才是我的问题中涉及的关键。只不过我的表单要求用“POST”。