EVC工程的移植

本文是针对作者本人的一个具体的移植项目,将碰到的所有问题列出来,并给出具体的解决方法。由于是一个具体的项目,因此不能把所有的EVC工程移植问题囊括进来。所以,在移植项目前,建议还是看看以下的文章:
循序渐进:将 eMbedded Visual C++ 应用程序迁移到 Visual Studio2005
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 Studio2005
       开发环境: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.0SDK,也需要修改。
     以下是针对Debug模式下的:
1、StdAfx.cpp (Resealse 模式也需要改)
编译错误:D:\Program Files\Microsoft Visual Studio8\VC\ce\atlmfc\include\afxver_.h(77) : fatal error C1189: #error :Please use the /MD switch for _AFXDLL builds
解决方法:右击工程名,打开Projectproperties对话框,切换到C/C++->Code generation页,将RuntimeLibarary 设置成"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 (__cdeclCMyAppView::* )(void)' to 'LRESULT (__cdecl CWnd::*)(WPARAM,LPARAM)'None of the functions with this name in scopematch the target type
解决方法:
afx_msg void OnHotLinkExplain();  --- 〉
afx_msg LRESULT OnHotLinkExplain(WPARAM wParam,LPARAMlParam);
9、error C2664: 'CSize CDC::GetTextExtent(LPCTSTR,int) const' :cannot convert parameter 1 from 'WORD *' to 'LPCTSTR'
Types pointed to are unrelated; conversion requiresreinterpret_cast, C-style cast or function-stylecast需要强制转换
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 Studio8\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 SHInitExtraControlsreferenced in function "protected: __cdeclCMyAppView::CMyAppView(void)" (??0CMyAppView@@IAA@XZ)
问题:程序中调用了SHInitExtraControls();
error LNK2019: unresolved external symbol SHSipPreferencereferenced in function "protected: void __cdeclCMyAppView::OnKillfocusWord(void)"(?OnKillfocusWord@CMyAppView@@IAAXXZ)
问题:程序中调用了SHSipPreference
以上两个函数都在:Library: aygshell.lib里
解决方法:
工程-->属性-->Linker -->input -- > AdditionalDenpendencies :aygshell.lib
14、Resease 模式下也要修改
orelibc.lib(wwinmain.obj) : error LNK2019: unresolved externalsymbol wWinMain referenced in function wWinMainCRTStartup
属性-〉Linker-〉Anvanced-〉EntryPoint
将 wWinMainCRTStartup 更改为 WinMainCRTStartup
EntryPoint是WinMainCRTStartup(ANSI)或wWinMainCRTStartup(UINCODE),即:... WinMainCRTStartup 或wWinMainCRTStartup 会调用WinMain或wWinMain。
15、  error C3861: 'LoadStdProfileSettings':identifier not found
注释掉函数 LoadStdProfileSettings;
该函数的具体功能,看MSDN。
      BTW:编译的时候,有可能会出现一些由以上错误产生的连锁错误,俗称"蝴蝶效应",如errorC2143: syntax error : missing ';' before '}'
error C2143: syntax error : missing ';' before ','
error C2143: syntax error : missing ';' before '{'
少了了'{'、'}'、';'等等,把以上的错误-主要矛盾解决了,这些错误-错误矛盾也就迎刃而解了。何况,这个工程是以前在EVCIDE下编译通过,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。

     这样,程序基本移植完成,但是还要把所有的功能过一遍,有可能还会碰到,诸如对话框出现乱码、菜单不对等问题。

### 如何在聊天机器人 (Chatbox) 中使用知识库进行问答或信息检索 #### 集成知识库的重要性 为了使聊天机器人更加智能化并能提供精准的信息,集成就绪的知识库显得尤为重要。这不仅提升了机器人的响应质量,还增强了用户体验[^2]。 #### 使用 Chatbox 和外部知识库的方法 对于像 Chatbox 这样的平台来说,虽然本身提供了与多种大型语言模型交互的能力,但其核心并不自带复杂的数据存储解决方案。因此,在实际应用中通常会采用第三方服务来实现这一目标。具体做法如下: - **API 调用方式**:通过 RESTful API 或 GraphQL 接口连接至已有的企业级数据库或其他形式的知识管理系统; - **插件扩展机制**:部分高级版本可能支持自定义开发插件,允许开发者创建专门针对特定业务场景下的数据源适配器; - **嵌入式搜索引擎**:引入Elasticsearch、Solr等全文索引引擎作为中间层,负责处理来自前端查询请求并将结果返回给调用方——即我们的聊天程序实例。 #### 实现步骤概述 尽管这里不建议使用具体的“首先”、“然后”,还是可以给出一个逻辑顺序供参考理解流程: 1. 明确需求分析阶段要解决的问题以及预期达到的效果。 2. 选定合适的技术栈组合方案,比如Python Flask/Django框架配合PyMySQL驱动对接MySQL Server,或是Node.js Express搭配MongoDB NoSQL文档型数据库等等。 3. 编写必要的接口函数完成前后端之间的通信协议设计工作,并确保安全性和性能优化措施到位。 4. 测试联调期间不断调整参数配置直至满足生产环境部署标准为止。 5. 上线运行后持续监控维护系统稳定状态的同时收集反馈意见以便后续改进迭代升级计划制定依据。 ```python import requests def fetch_knowledge_base_data(query_string): url = 'http://your.kb.api/v1/search' params = {'q': query_string} response = requests.get(url, params=params) if response.status_code == 200: return response.json() else: raise Exception('Failed to retrieve data from knowledge base') ``` 上述代码片段展示了如何向远程服务器发起 HTTP GET 请求以获取匹配项列表。当然这只是其中一个简单例子而已,实际情况可能会涉及到身份验证令牌传递、错误重试策略设定等多个方面考量因素。 #### 结合角色提示增强互动效果 除了单纯依赖于预设好的静态条目外,还可以考虑加入动态生成的回答模式。例如当检测到来访者询问有关历史事件的时间节点时,则临时赋予AI助理相应的历史学家身份特征去组织措辞表达观点[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值