EVC4.0及adoce3.1安装心得

2007-04-27     浏览:964422104     来源:不详
关键词:  VC     ADO     安装     EVC     vc  
以前开发是我们老大搭建的环境,这次我自己搭建了一次,在网上查了些资料,还是折腾了两天,终于可以用了,感觉很高兴,总结了一下安装的经验,和大家共享一下,希望能对象我这样的初学者有些帮助,有不当的地方也欢迎指正。

一 安装开发工具顺序:
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