3263|4

57

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于WinCE数据库API的代码问题 [复制链接]

HANDLE g_hDB;
CEOID g_oidDB;
int g_nLastSort = PID_NAME;


(1)
static HANDLE OpenCreateDB(HWND hWnd, int * pnRecords)
{
        int i, rc;
        CEOIDINFO oidinfo;
        SORTORDERSPEC sos[4];

        g_oidDB = 0;
        g_hDB = CeOpenDatabase(&g_oidDB, TEXT("\\Albums"), g_nLastSort, 0, hWnd);

        if(g_hDB == INVALID_HANDLE_VALUE)
        {
                rc = GetLastError();

                if(rc == ERROR_FILE_NOT_FOUND)
                {
                        i=0;
                        sos.propid = PID_NAME;
                        sos[i++].dwFlags = 0;

                        sos.propid = PID_ARTIST;
                        sos[i++].dwFlags = 0;               

                        sos.propid = PID_CATEGORY;
                        sos[i++].dwFlags = 0;               

                        g_oidDB = CeCreateDatabase(TEXT("\\Albums"), 0, 3, sos);

                        if(!g_oidDB)
                        {
                                TCHAR szErr[100];

                                wsprintf(szErr, TEXT("Database create failed. rc %d"), GetLastError());

                                MessageBox(hWnd, szErr, szAppName, MB_OK);

                                return 0;
                        }

                        g_hDB = CeOpenDatabase(&g_oidDB, NULL, g_nLastSort, 0, hWnd);
                }
        }

        CeOidGetInfo(g_oidDB, &oidinfo);
        *pnRecords = oidinfo.infDatabase.wNumRecords;

        return g_hDB;
}

上面这个函数我尝试去打开一个database,如果不存在,则创建一个.
但是在编译时却返回如下错误:
.\AlbumDB.cpp(44) : error C4995: 'CeOpenDatabase': name was marked as #pragma deprecated
.\AlbumDB.cpp(62) : error C4995: 'CeCreateDatabase': name was marked as #pragma deprecated
.\AlbumDB.cpp(75) : error C4995: 'CeOpenDatabase': name was marked as #pragma deprecated
实在弄不清楚为什么?


(2)
static LPARAM DoMainCommandEdit(HWND hWnd, WORD idItem, HWND hwndCtl, WORD wNotifyCode)
{
        PCEPROPVAL pcepv = 0;
        int nSel, rc;
        WORD wProps = 0;
        DWORD dwRecSize, dwIndex;
        CEOID oid;

        oid = CeReadRecordProps(g_hDB, CEDB_ALLOWREALLOC, &wProps, NULL, &((LPBYTE)pcepv), &dwRecSize);
        if(!oid)
        {
                TCHAR szTxt[64];

                rc = GetLastError();
                wsprintf(szTxt, TEXT("DB item not read. rc = %d(%x)."), rc, rc);

                MessageBox(hWnd, szTxt, TEXT("Error"), MB_OK);
                return 0;
        }
}

这个函数我是想编译一个数据项,只把问题代码列出了.
编译时发生如下错误:
.\AlbumDB.cpp(650) : error C2102: '&' requires l-value
不清楚为什么?



麻烦高手帮忙看看这两个问题吧! 谢谢了!!!
此帖出自WindowsCE论坛

最新回复

谢谢 问题解决了   详情 回复 发表于 2008-5-19 09:48
点赞 关注
 

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
1\可以使用
#pragma   warning(   disable:4995   )   //   disable   deprecated   warning
来去掉warning
不过应该是需要换一个api CeOpenDatabaseEx2
2\ PCEPROPVAL pcepv = 0; 是个空指针,需要分配一个实体

此帖出自WindowsCE论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
感谢
第一个问题解决了

但是第二个问题仍然存在
我查了windows mobile 6 sdk关于CeReadRecordProps()函数的说明:
lplpBuffer
[out] Pointer to a long pointer to a buffer that receives the requested properties. If the dwFlags parameter includes the CEDB_ALLOWREALLOC flag, the buffer may be reallocated if necessary. If the CEDB_ALLOWREALLOC flag is specified and this parameter is NULL, the server uses the LocalAlloc function to allocate a buffer of the appropriate size in the caller's address space and returns a pointer to the buffer. Note that if the CEDB_ALLOWREALLOC flag is specified, it is possible for the value of this pointer to change even on failure. For example, the old memory might be freed and the allocation might then fail, leaving the pointer set to NULL.


就是说允许这个参数指针是空指针,会自行调用LocalAlloc()申请内存的.
即使我在改为这样:

pcepv = (PCEPROPVAL)LocalAlloc(LPTR, sizeof(CEPROPVAL));
oid = CeReadRecordProps(g_hDB, CEDB_ALLOWREALLOC, &wProps, NULL, &((LPBYTE)pcepv), &dwRecSize);

仍然编译不过,还是那个错误.

求教!
谢谢了!!!
此帖出自WindowsCE论坛
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(中级)

4
 
try:

LPBYTE pcepv = NULL;
oid = CeReadRecordProps(g_hDB, CEDB_ALLOWREALLOC, &wProps, NULL, &pcepv, &dwRecSize);  
此帖出自WindowsCE论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

5
 
谢谢
问题解决了

此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表