关于报Internet Services错误的问题

不是技术问题的问题.

 

切记:要装对应的SP1!

 

拿到手一个项目编译了一下出现个错误 :

#error :  Internet Services classes not supported in this library variant.

 

是在 afxinet.h 里

#ifdef _AFX_NO_INET_SUPPORT
#error Internet Services classes not supported in this library variant.
#endif

 

郁闷了一下,后来解决了。

 

不是别的问题,一般是没打SP1,或打的错误。

 

在没打之前在D:/Program Files/Microsoft Visual Studio 8/VC/ce/atlmfc/include/afxinet.h 里有这段代码。

#ifdef _AFX_NO_INET_SUPPORT
#error Internet Services classes not supported in this library variant.
#endif

 

而打过之后是没有的:

#ifndef __AFXINET_H_
#define __AFXINET_H_

#pragma once

#ifndef __AFX_H__
 #include <afx.h>
#endif

#ifndef _WININET_
#include <wininet.h>
#endif

#ifdef _AFXDLL
#pragma comment(lib, "wininet.lib")
#endif

 

 

这个问题不是技术问题!

参考文献:

也谈EVC工程移植

本文是针对作者本人的一个具体的移植项目,将碰到的所有问题列出来,并给出具体的解决方法。由于是一个具体的项目,因此不能把所有的EVC工程移植问题囊括进来。所以,在移植项目前,建议还是看看以下的文章:
循序渐进:将 eMbedded Visual C++ 应用程序迁移到 Visual Studio 2005
eMbedded Visual C++ 到 Visual Studio 2005 升级向导(注意其最后一句话:默认情况下,Embedded Visual C++ 4.0 版会将 MFC Pocket PC 应用程序的对话框样式(Border)设置为 DS_MODALFRAME。MFC 8.0 不支持此样式。 —— 应改为Thin,如果不改的话,窗口就无法弹出。)
从 eVC 移植所带来的已知问题
Migrating Microsoft eMbedded Visual C++ Projects to Visual Studio 2005
        开发环境: Windows XP +SP2 , Visual Studio 2005 professional, Windows Mobile 6.0 Professional SDK。
注:(1) 对于 Windows Mobile 5.0 SDK 开发的程序在 Windows Mobile 6.0 下也能运行,而且不需要对程序进行任何的修改。
      (2)由于有些错误,是环境配置问题,所以在Debug/Resease模式下,都需要进行修改,以下错误中,如果是这类错误,都在标号后面写着 “Resealse 模式也需要改”,当天切换到别的SDK下,如Windows Mobile 5.0 SDK,也需要修改。
      以下是针对Debug模式下的:
1、StdAfx.cpp (Resealse 模式也需要改)
编译错误:D:/Program Files/Microsoft Visual Studio 8/VC/ce/atlmfc/include/afxver_.h(77) : fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds
解决方法:右击工程名,打开Project properties对话框,切换到C/C++->Code generation页,将Runtime Libarary 设置成“Multi-threaded DLL(/MD)”,即可解决此问题。
2、编译错误:error C2065: 'i' : undeclared identifier
原因:是由于存在以下的代码段:
for (int i = 0; i < MAX_LEN; i ++)
{
   //……
}
for (i = 0; i < MAX_NUM; i ++)
{
    //……
}
对于evc离开循环后,循环变量仍然有效,并且仍可以使用,但是在VS2005下是不行的,由此可见VS2005对变量的定义与审查更为严格,还有就是对数组越界问题也比EVC来的强。
解决方法:(不能完全相信编译器,也不能把所有的语法检查都丢给编译器)
int i = 0;
for (i = 0; i < MAX_LEN; i ++)
{
    //……
}
for (i = 0; i < MAX_NUM; i ++)
{
     //……
}
3、error C2664: '_wcsnicmp' : cannot convert parameter 2 from 'LPWORD' to 'const wchar_t *'
 需要 强制类型转换
4、error C2061: syntax error : identifier 'HELPINFO'
自己 增加HELPINFO的类型,增加头文件 HelpInfo.h
5、error C2146: syntax error : missing ';' before identifier 'm_wndCommandBar'
原因:在Windows Mobile 5.0/6.0 下CCeCommandBar类被CCommandBar替换
解决方法:
CCeCommandBar   m_wndCommandBar; ---- 〉CCommandBar   m_wndCommandBar;
6、error C2065: 'NUM_TOOL_TIPS' : undeclared identifier
解决:
//#if defined(_WIN32_WCE_PSPC) && (_WIN32_WCE >= 212)
#define NUM_TOOL_TIPS 8
//#endif
7、error C3861: 'ON_WM_HELPINFO': identifier not found
同 4
8、error C2440: 'static_cast' : cannot convert from 'void (__cdecl CMyAppView::* )(void)' to 'LRESULT (__cdecl CWnd::* )(WPARAM,LPARAM)'None of the functions with this name in scope match the target type
解决方法:
afx_msg void OnHotLinkExplain();  --- 〉
afx_msg LRESULT OnHotLinkExplain(WPARAM wParam,LPARAM lParam);
9、error C2664: 'CSize CDC::GetTextExtent(LPCTSTR,int) const' : cannot convert parameter 1 from 'WORD *' to 'LPCTSTR'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast需要 强制转换
pDC->GetTextExtent(&i, 1).cx);   ——>
pDC->GetTextExtent((LPCTSTR)&i, 1).cx;
10、error C2039: 'OnHelpInfo' : is not a member of 'CView'
error C2039: 'OnHelpInfo' : is not a member of 'CFrameWnd'
error C2039: 'OnHelpInfo' : is not a member of 'CDialog'
解决方法:用TRUE替换相应的类成员函数OnHelpInfo'
return CView::OnHelpInfo(pHelpInfo); ——> return TRUE;
11、error C2039: 'm_bShowSharedNewButton' : is not a member of 'CCommandBar'
D:/Program Files/Microsoft Visual Studio 8/VC/ce/atlmfc/include/afxext.h(557) : see declaration of 'CCommandBar'
解决方法
直接注释掉 m_wndCommandBar.m_bShowSharedNewButton = FALSE;
12、./MyApp.rc(380) : fatal error RC1015: cannot open include file 'wceres.rc'.
解决方法
直接注释掉:#include "wceres.rc"         // WCE-specific components
但是,这个错误很讨厌, 每次你修改资源文件后,都得修改该语句,不知道为什么。
13、Resease 模式下也要修改
error LNK2019: unresolved external symbol SHInitExtraControls referenced in function "protected: __cdecl CMyAppView::CMyAppView(void)" ( ??0CMyAppView@@IAA@XZ)
问题:程序中调用了SHInitExtraControls();
error LNK2019: unresolved external symbol SHSipPreference referenced in function "protected: void __cdecl CMyAppView::OnKillfocusWord(void)" ( ?OnKillfocusWord@CMyAppView@@IAAXXZ)
问题:程序中调用了SHSipPreference
以上两个函数都在:Library: aygshell.lib里
解决方法:
工程-->属性-->Linker -->input -- > Additional Denpendencies :aygshell.lib
14、Resease 模式下也要修改
orelibc.lib(wwinmain.obj) : error LNK2019: unresolved external symbol wWinMain referenced in function wWinMainCRTStartup
属性—〉Linker—〉Anvanced—〉EntryPoint
将 wWinMainCRTStartup 更改为 WinMainCRTStartup
Entry Point是WinMainCRTStartup(ANSI)或wWinMainCRTStartup(UINCODE),即: ... WinMainCRTStartup 或wWinMainCRTStartup 会调用WinMain 或wWinMain。
15、  error C3861: 'LoadStdProfileSettings': identifier not found
注释掉函数 LoadStdProfileSettings
该函数的具体功能,看MSDN。 
       BTW:编译的时候,有可能会出现一些由以上错误产生的连锁错误,俗称“蝴蝶效应”,如error C2143: syntax error : missing ';' before '}'
error C2143: syntax error : missing ';' before ','
error C2143: syntax error : missing ';' before '{'
少了了'{'、'}'、';'等等,把以上的错误—主要矛盾解决了,这些错误—错误矛盾也就迎刃而解了。何况,这个工程是以前在EVC IDE下编译通过,MS再怎么优化或改进编译器,也总不可能发生自相矛盾的事情吧,总要考虑兼容性吧,要对自己或公司的前辈有信心!
      到此,已经能够编译通过,但是运行的时候,又出现如下的问题:
16、Resease 模式下也要修改
按F5,出现如下的对话框:

解决方法:
 右击工程的属性—〉General—〉Project Defaults –〉Use MFC :
Use MFC in a shared DLL ——> Use MFC in a static DLL
也正是因为这个,VS2005产生的EXE程序比EVC产生的要大200多k。
 
//以下从另外一个地方得来的知识和自己移植发现的问题[GXH]
17、Internet Services需要移植

According to MSDN documentation, these classes were dropped from MFC. If I try to use any of these classes I get the following error message:

Fatal error C1189: #error :  Internet Services classes not supported in this
library variant.

I traced the problem and found the following code in afxinet.h

#ifdef _AFX_NO_INET_SUPPORT
#error Internet Services classes not supported in this library variant.
#endif

My question is: Is there any replacement classes to the above ones?

In general, for working/functional classes from MFC4 the advice we've been giving people is to look at whether they can lift the source for the class from MFC4 and make it part of their project (or compile it into a static lib, and link that in, etc.). The classes above were probably cut for size reasons, or because the behaviour they wrapped was easily accessible in another way (yes, in many cases this turned out to be the wrong thing to do). In other cases, the cut classes never worked, or never really made sense on CE-based devices.

This problem has been solved in VS2005 SP1 according to MSDN.

18、CBitmapButton需要移植

VS2005 removed this class from MFC, just directly copy it from other MFC's source file winbtn.cpp can solve this problem.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值