新闻详情

新闻详情

首页 / 资讯中心 / 详情

移动开发多平台代码共享

发布时间:2026/9/9 16:29:25来源:尧图网络
移动开发多平台代码共享
做移动开发快一年了有幸接触了WM、Symbian、Android、iPhone等多个平台的开发。往往一个软件需要实现多个平台的版本对于不同平台进行重新编码是一件很费劲的事情其实我们可以通过代码共用技术实现对一些代码的重用。这一技术的应用可以带来不少的好处1.代码重用节约开发和维护的时间2.核心代码的保护将核心代码编译成库只将库而不是源代码提供给上层开发人员使用。3.。。。。。。本文将实现一个支持这几个平台的天气信息查询软件软件采用C语言去实现调用WebService接口获取天气信息的功能并将其编译成各种平台能够调用的库而UI则采用各个平台各自的语言去实现最终实现底层代码的共用。先来看看最终的效果图:一、底层代码的实现我们要调用到WebService接口需要使用网络而对于不同的平台socket的使用上有细微差异我通过条件编译的方式实现对不同平台的兼容。下面是实现代码://对于VC的DLL,需要导出函数,而其他的则不需要头文件Common.h#ifdef _MSC_VER#define DLLFLAG _declspec(dllexport)#else#define DLLFLAG #endif//通过WebService接口获取天气信息DLLFLAG char* getWeather(const char *cityName);源文件Common.c#include string.h#include Common.h#include stdlib.h//根据系统加载不同的网络库#ifdef _MSC_VER#include winsock2.h#pragma comment(lib, winsock.lib)#else#include sys/socket.h#include netinet/in.h#include arpa/inet.h#include netdb.h#endif#define BUFSIZ 4096DLLFLAG char* getWeather(const char *pCityName){//对于VC需要初始化socket版本#ifdef _MSC_VERWSADATA wsaData;int iResult WSAStartup( MAKEWORD(2,2), wsaData );#endifint sockfd 0;struct sockaddr_in addr;char text[BUFSIZ] ;char header[BUFSIZ] ;char *content (char*)malloc(BUFSIZ);sockfd socket(AF_INET, SOCK_STREAM, 0);addr.sin_family AF_INET;//不同平台填充地址字段的方式不同#ifdef _MSC_VERaddr.sin_addr.S_un.S_addr inet_addr(222.73.218.218);#elseinet_aton(222.73.218.218,addr.sin_addr);#endifaddr.sin_port htons(80);memset(header, 0, sizeof(header));strcat(header, GET /Service.asmx/getWeatherbyCityName?theCityName);strcat(header, pCityName);strcat(header, theDayFlagToday HTTP/1.1rn);strcat(header, Host: www.ayandy.comrnrn);connect(sockfd,(struct sockaddr *)addr,sizeof(struct sockaddr_in));send(sockfd, header, strlen(header), 0);memset(text, 0, BUFSIZ);memset(content, 0, BUFSIZ);recv(sockfd, text, BUFSIZ, 0);strcat(content, text);//while ( recv(sockfd, text, BUFSIZ, 0) 0)//{// strcat(content, text);// memset(text, 0, BUFSIZ);//}//不同平台关闭socket的方法不同#ifdef _MSC_VERclosesocket(sockfd);WSACleanup();#elseshutdown(sockfd, SHUT_RDWR);#endifreturn content;}二、Windows Mobile 平台对于WM平台为了与底层库相区别我们就不用VC去实现UI而使用C#来实现UI。1.编译dllVisual C – 智能设备 – 由于没有好的dll模板我们就建一个“MFC智能设备DLL”取名ShareLib然后在生成的项目中删除掉没用的文件比如预编译啥的添加我们的底层代码文件Common.h和 Common.c最终文件结构如图然后编译最终会生成ShareLib.dll文件2.实现主界面新建一个C#的智能设备项目取名ShareLibTest在Form1.cs文件中添加对于dll的引用[DllImport(ShareLib.dll,CharSetCharSet.Unicode) ]publicstaticexternIntPtr getWeather(stringcityName);然后进行界面的设计最终界面如图然后给按钮设置点击事件
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

旧 Mac 怎么装最新版 macOS:OpenCore Legacy Patcher 完整指南 2026/9/9 16:26:58

旧 Mac 怎么装最新版 macOS:OpenCore Legacy Patcher 完整指南

旧 Mac 怎么装最新版 macOS:OpenCore Legacy Patcher 完整指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你的 Mac 是不是被官方锁死在 2013…

阅读更多 →
老Mac装不上新系统?OpenCore Legacy Patcher 升级指南 2026/9/9 16:26:58

老Mac装不上新系统?OpenCore Legacy Patcher 升级指南

老Mac装不上新系统?OpenCore Legacy Patcher 升级指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 苹果停止为老款 Intel Mac 提供系统升级后&…

阅读更多 →
论文降AI率全攻略:从检测原理到10款工具实测与保姆级操作流程 2026/9/9 16:26:58

论文降AI率全攻略:从检测原理到10款工具实测与保姆级操作流程

你的论文被导师退回来时,批注里写着“AI味太重”;或者查重报告出来后,AIGC检测那一栏标红一片——这两件事我在过去一年都经历过。所谓“降AI率”,就是想办法让论文里被AIGC检测系统识别为机器生成的内容,看起来更像真…

阅读更多 →
持续提升网站SEO排名的长期维护方案与实战指南 2026/9/9 16:26:58

持续提升网站SEO排名的长期维护方案与实战指南

1. 长期SEO维护的整体思路:为什么“优化一次”解决不了问题做SEO这几年,我见过太多人把网站优化当成一个“上线项目”来做:花两个月集中改版、堆内容、换标题,然后坐等排名暴涨,结果三个月之后流量慢慢掉回去&#xff…

阅读更多 →
Telegraf 监控代理实战:5 分钟跑通采集闭环,一路做到生产部署 2026/9/9 16:26:58

Telegraf 监控代理实战:5 分钟跑通采集闭环,一路做到生产部署

Telegraf 监控代理实战:5 分钟跑通采集闭环,一路做到生产部署 【免费下载链接】telegraf Agent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data. 项目地址: https://gitcode.com/GitHub_Trending/te/…

阅读更多 →
高斯混合模型GMM聚类算法详解:从原理到实战对比K-means 2026/9/9 16:23:58

高斯混合模型GMM聚类算法详解:从原理到实战对比K-means

1. GMM到底在解决什么问题,为什么比K-means更“聪明”1.1 从K-means的短板说起搞聚类的人,几乎没有人没栽过K-means的跟头。不是因为它不好用,而是因为它太想当然了。K-means的核心逻辑很简单:先随机点几个中心点,然后…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞