|
以前开发是我们老大搭建的环境,这次我自己搭建了一次,在网上查了些资料,还是折腾了两天,终于可以用了,感觉很高兴,总结了一下安装的经验,和大家共享一下,希望能对象我这样的初学者有些帮助,有不当的地方也欢迎指正。 一 安装开发工具顺序: 1. 安装ActiveSync(连接PC和设备用) 2. 安装EVT(包含EVC3,按默认路径安装) 3. 安装SQL SERVER CE2000(包含Adoce3.1)。 安装后在C:\Windows CE Tools\wce300\Pocket PC 2002\dataaccess31 目录下可以找到Adoce31的idl及Dll文件。 4. 安装EVC4.0 5. 安装EVC4sp4 6. 安装Microsoft Pocket PC 2003 SDK(我们的项目采用PPC的,所以用这个SDK) 7. 安装Chinese (Simplified) Emulation Images(这可是Pocket PC 2003 SDK的中文印象文件) 参考文档: 1. http://blog.vckbase.com/zuilang/archive/2005/09/28/12600.html文章《在evc中使用ADOCE的前期准备》 2.《初学EVC心得体会之安装篇》作者: liuyu 发布日期: 2004-08-12 02:17:41 注:该文章是在一个保存的网页上找到的,所以没有网址。 二. 获得ADOCE31.h文件, (1) 需要將 ADOCE31.IDL、ADOCEC31.IDL、ADOXCE31.IDL找出來,先暂时复制到一个暂存的目录,假定在 C:\adoce31下。 (2) 然后再找:C:\Program Files\Microsoft eMbedded Tools\EVC\WCE300\BIN 目录下的內容,全部复制到 C:\adoce31目录下。 (3) 接下來,执行WCEARM.BAT(因为我的设备是 ARM的 CPU,若是 MIPS的话,请选择适当的 CPU),然后在 dos command中执行(C:\adoce31目录下): midl.exe adoce31.idl midl.exe adocec31.idl midl.exe adoxce31.idl 现在在C:\adoce31目录中已经得到adoce31.h文件。 (4) 最后将这些文件全部复制到:C:\Program Files\Windows CE Tools\wce420\POCKET PC 2003\Include 目录下的文件夹中。 [注意]这一步可能有人会忘记。。。。 [注意]我执行最后一句midl.exe adoxce31.idl时,dos 给了我以下warning,不过好像不影响我现在的编程。欢迎各位提供指教。谢谢。 .\adoxce31.idl(445) : warning MIDL2039 : interface does not conform to [oleautom ation] attribute : [ Parameter ''pVal'' of Procedure ''get_NumericScale'' ( Interfac e ''_Column'' ) ] .\adoxce31.idl(448) : warning MIDL2039 : interface does not conform to [oleautom ation] attribute : [ Parameter ''newVal'' of Procedure ''put_NumericScale'' ( Interf ace ''_Column'' ) ] 参考文档: 该文档由 http://www.talkce.com/discuss 的小民老师提供,我看到的不是原文,但还是要感谢小民老师。 三. 注册及使用adoce31。 1.将Adoce PPC_ARM文件夹中"需要使用的DLL"中的文件复制到设备的Windows文件夹下; 2.数据库程序中在使用VOADO之前注册这些DLL CreateProcess(_T("\RegSvrCe"),_T("/s \Windows\\adoce31.dll"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); CreateProcess(_T("\RegSvrCe"),_T("/s \Windows\\Adoxce31.dll"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); CreateProcess(_T("\RegSvrCe"),_T("/s \Windows\\Adocedb31.dll"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); CreateProcess(_T("\RegSvrCe"),_T("/s \Windows\\Adoceoledb31.dll"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); CreateProcess(_T("\RegSvrCe"),_T("/s \Windows\\Msdaer.dll"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); CreateProcess(_T("\RegSvrCe"),_T("/s \Windows\\Msdaeren.dll"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); CreateProcess(_T("\RegSvrCe"),_T("/s \Windows\\msdadc.dll"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); CreateProcess(_T("\RegSvrCe"),_T("/s \Windows\\msdaosp.dll"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); 3.将VoAdo中所有文件添加到你的工程中,将其中adoce30.h都改为adoce31.h; 4.将vorecordset.h文件中此处改为 BOOL CVORecordset::g_Init = FALSE; CLSID CVORecordset::g_ClsID; TCHAR* CVORecordset::g_ProgID = TEXT("ADOCE.Recordset.3.1"); 原来第3句为TCHAR* CVORecordset::g_ProgID = TEXT("ADOCE.Recordset.3.0"); 5.将Include文件夹中的adoce31.h和adocec31.h添加到你的工程中; 6.将regsvrce.exe复制到设备中和你的数据库程序同一个文件夹下(该文件在Program Files\Microsoft eMbedded C++ 4.0\EVC\WCE400\TARGET\ARMV4文件夹下)。 说明:以上文件的来源 1.DLL文件来自微软的adocepbzip安装包,在这个文件夹下:adocepb\setup\Data Access 3.1\Program Files\DataAccess31\DEVICE\ARM\SA1100\CE\RETAIL 此安装包在这里下载http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=929bb147-281c-4d6e-a727-67271075fadb&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fado%2fCE-PB%2f3.1%2fWCE%2fEN-US%2fadocepbzip.exe 2.VoAdo是VOS公司做的一个使用比较方便的ADOCONNECTION和ADORECOEDSET类,下载下来的需要修改(见3)才能使用,本压缩包的文件已经做了修改.在这里下载http://www.voscorp.com/products/developer/winmobile/voado/voado.zip 3.adoce31.h和adocec31.h文件的生成: 在微软的adocepbzip安装包的adocepb\setup\Data Access 3.1\Program Files\DataAccess31\INCLUDE目录下,有这样两个文件 adoce31.idl和adocec31.idl,在命令行中执行midl adoce31.idl和midl adocec31.idl即可生成.h文件. 参考文档: 文档是 书童 Macintosh 发表于 2005-12-27 11:22:32 在《在evc中使用ADOCE的前期准备》的评论中发表的。 最后非常感谢各位前辈把自己的心得及经验发表出来,能给我这样的初学者提供帮助。 我的总结也许还有不当,欢迎您能指正,有什么意见和建议欢迎您能提出,让我也能提高,同时也能给别的初学者一些帮助。 我的Email: young45@126.com 还有一点疑惑,原来的工程运行正常,但在我搭建的环境下要做下面两处修改: 1. BOOL CVORecordset::Delete()函数中的 hr = m_rs->Delete(); 可以编译通过,现在编译不过了,提示m_rs->Delete()的参数是Long类型的。 2. CVOConnection::CVOConnection(LPCTSTR pcszProvider) : m_Conn(NULL) 中的 if(pcszProvider == NULL) { pcszProvider = TEXT("cedb"); hr = CoCreateInstance(g_ClsID, NULL, CLSCTX_INPROC_SERVER, IID__Connection, (LPVOID*) &m_Conn); hr = m_Conn->put_Provider((LPTSTR)pcszProvider); //跟踪调试这里 m_Conn 没有负值;屏蔽这两个语句就可运行。 hr = m_Conn->Open(TEXT(""),TEXT(""),TEXT(""),adOpenUnspecified); } 转自:http://club.embedev.net/viewtopic.php?t=5478 |