本站首页 电路图 元器件 设计制作 电子维修 电子资料 技术资讯 单片机 PCB 电路制图 创意设计 造型设计 电脑网络 平面设计 神气科技 创业资料 产品营销 供求信息 本站邮购 创业指南 I C设计 研发生产 网站制作 人力资源 免费资源 实用查询 工业设计 动画制作
您当前的位置:中国电子产品开发网创意设计设计文献 → 创意设计内容 退出登录 用户管理
创意设计栏目导航
热门创意设计
相关创意设计
简化Windows Mobile代码维护的编程技巧
作者:佚名  来源:不详  发布时间:2008-2-3 13:17:02

减小字体 增大字体

提供数字电路设计、模拟电路设计、单片机软件开发,电子产品批量生产,请联系:
无锡神气科技有限公司:
www.shenqikeji.com;0510-88966311;13961896016;QQ:908821848
  为了使应用程序的维护和支持工作尽可能少,开发人员希望使计划支持的平台都用统一的源代码,甚至希望可以使一个二进制文件在两个平台上都能运行,以下技巧将有助于您实现这个目标。

  一、检查平台的版本

  在编译时确定平台的版本,那样可以使用同一套源代码来在编译时适应不同平台二进制文件。

  在程序运行时检查平台的版本,这样就可以根据判断来进行不同的操作,使用同一个二进制文件能运行在不同的平台上。

#define POCKETPCV1 1
#define SMARTPHONEV1 2
#define POCKETPCV2 3
#define SMARTPHONEV2 4
int MyDeviceType()
{
TCHAR szPlatform[MAX_STRING_BUFFER];
int iDeviceType=0;
OSVERSIONINFO osVer;
GetVersionEx(&osVer);
if (osVer.dwMajorVersion==3)
{
if (SystemParametersInfo(SPI_GETPLATFORMTYPE,
sizeof(szPlatform),szPlatform,0)!=0)
{
if (lstrcmp(szPlatform,TEXT("PocketPC"))==0)
iDeviceType= POCKETPCV1; // runs on Pocket PC 2000 and 2002
else if (lstrcmp(szPlatform,TEXT("Smartphone"))==0)
iDeviceType= SMARTPHONEV1; // runs on Smartphone 2002
}
else
{
if (GetLastError()==ERROR_ACCESS_DENIED) //(5)
iDeviceType= SMARTPHONEV1; // is a smartphone:
// Smartphone creates an access denied error on
// SystemParametersInfo()
}
}
else
{
if (osVer.dwMajorVersion==4)
{
if (SystemParametersInfo(SPI_GETPLATFORMTYPE,
sizeof(szPlatform),szPlatform,0)!=0)
{
if (lstrcmp(szPlatform,TEXT("PocketPC"))==0)
iDeviceType= POCKETPCV2; // runs on Pocket PC 2003
else if (lstrcmp(szPlatform,TEXT("Smartphone"))==0)
iDeviceType= SMARTPHONEV2; // runs on Smartphone 2003
}
else
{
if (GetLastError()==ERROR_ACCESS_DENIED) //(5)
iDeviceType= SMARTPHONEV2; // is a smartphone:
// Smartphone creates an access denied error on
// SystemParametersInfo()
}
}
}
return iDeviceType;
}


在 Smartphone 上调用“SystemParametersInfo()”时,如果Smartphone 锁定和应用程序签署的证书,可能会引起“Access Denied”而失败 。因为只有Smartphone 才会引起 Access Denied 失败,所以您也可以用它作为 Smartphone 的标记。

  二、在程序中确定“My Document”和存储卡的位置

  发现存储卡:

void ShowFlashCard()
{
BOOL bContinue = TRUE;
HANDLE hFlashCard;
WIN32_FIND_DATA lpwfdFlashCard;
hFlashCard = FindFirstFlashCard (&lpwfdFlashCard);
if (hFlashCard == INVALID_HANDLE_VALUE)
return;
while (bContinue)
{
MessageBox(NULL,lpwfdFlashCard.cFileName,
TEXT("FindFlash"),MB_OK);
bContinue = FindNextFlashCard (hFlashCard,
&lpwfdFlashCard);
}
FindClose (hFlashCard); // Close the search handle.
}
发现“My Documents”:

不同语言版本的Windows Mobile的路径名是不同的,如:
英文版是“\My Documents”
简体中文版是“\我的文档”
德文版是“\Meine Dokumente”
应该使用以下的调用来获取指向My Documents的正确路径。

SHGetSpecialFolderPath(NULL,szTxt,CSIDL_PERSONAL,0);

CSIDL_PERSONAL 请求“My Documents”文件夹以 szTxt (TCHAR) 形式返回。

  三、为每个平台使用不同的资源定义

  如果您想让相同的二进制文件既可用于 Pocket PC,又可用于 Smartphone,您必须创建两种资源定义,一个平台一种。如果您只想使源代码保持同步,您可以使用资源的“condition”属性来包含正确的资源。

  假如您想让二进制文件具有兼容性,您需要在代码中加载 Pocket PC 或 Smartphone 资源:

switch (iDeviceType) // Determined with tip -1- above
{
case SMARTPHONEV1:
case SMARTPHONEV2:
idd=IDD_SMARTPHONE;
break;
case POCKETPCV1:
case POCKETPCV2:
idd=IDD_POCKETPC;
break;
default:
idd=IDD_HPC;
break;
}
return DialogBox(hInst,MAKEINTRESOURCE(idd),
hWndMain,(DLGPROC)StartDlgMain);