移动开发多平台代码共享

发布时间:2026/9/5 22:30:55

移动开发多平台代码共享
做移动开发快一年了有幸接触了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);然后进行界面的设计最终界面如图然后给按钮设置点击事件

相关新闻

内存 RDIMM 带寄存器 速度更快 性能更好啊

内存 RDIMM 带寄存器 速度更快 性能更好啊

2026/8/29 6:14:51

在低负载或单条内存的场景下,RDIMM 的延迟确实更低,理论上“速度更快”。但对服务器这种高负载、多内存插槽的环境来说,这个“快”并不是性能的全部,甚至可以说实际体验中LRDIMM并不比RDIMM慢。两者的差异可以这样理解&#xff1a…

出口制造企业流水线配件采购合规与成本如何同步优化?2026 实操指南

出口制造企业流水线配件采购合规与成本如何同步优化?2026 实操指南

2026/9/1 3:35:47

大家好,我是阿九。今天这篇文章,写给所有被产线零散配件采购折磨过的朋友——无论是被非标螺丝卡住进度的设备工程师,还是疲于应付十多家供应商的采购主管。我们将直面出口制造企业流水线配件采购中一个最真实的痛点:当“小批量、…

2026国内企业AI培训服务商TOP3深度评测:从智能体架构到业务落地的技术选型指南

2026国内企业AI培训服务商TOP3深度评测:从智能体架构到业务落地的技术选型指南

2026/9/3 7:50:09

引言:AI人才缺口背后的技术落地困境根据《人工智能产业人才发展报告(2025~2026)》数据显示,当前中国AI人才缺口已超580万人,超70%的企业将"团队AI能力不足"列为智能化转型的首要阻碍。这个数据背后,是一个被…

用Python做一个接单报价计算器:基础语法实现项目成本估算

用Python做一个接单报价计算器:基础语法实现项目成本估算

2026/9/5 22:19:49

你有没有算错过自己的接单报价?对方问“这个管理系统大概多少钱”,你脑子里的第一反应往往是:先报个感觉差不多的数,气氛到了,再多少留点砍价空间。但真正做起来才发现,当时报的是“登录加商品管理”&#…

技术写作红线:为何不可虚构部署教程与API参数?

技术写作红线:为何不可虚构部署教程与API参数?

2026/9/5 19:19:41

抱歉,这个任务我不能按当前方式执行。 原因有两点: 《偏激暴食者的审美误区》不是 CSDN 文章目标范围内的技术项目、模型或工具,也不具备“硬件门槛 / 显存占用 / 启动方式 / API 接口 / 批量任务”等核心事实素材。强行套用“部署教程”结…

STM32H747 DMA2D图像混合原理与CubeMX配置实战

STM32H747 DMA2D图像混合原理与CubeMX配置实战

2026/9/5 18:19:39

实际做视觉显示或 GUI 开发时,图像混合往往比看起来更占资源。一个典型需求是把一张半透明的前景图叠加到底图上,或者把摄像头采集帧和 UI 图标合到同一个显示缓冲区。逐像素用 CPU 算当然能做,但题目是 STM32H747 这类双核视觉芯片&#xff…

IDEA 闪退后项目端口仍被占用的解决方法(Windows)

IDEA 闪退后项目端口仍被占用的解决方法(Windows)

2026/9/5 18:09:39

按 Win R 打开“运行”窗口,输入 cmd,点击“确定”打开命令提示符。然后输入命令netstat -ano | findstr :端口号找到被占用的进程号,最后一列数字即为进程 PID。例如查询结果最后一列为 12345,可以先通过以下命令确认该 PID 对应…

FZ-PanDA 5.72版本解析与安全使用指南

FZ-PanDA 5.72版本解析与安全使用指南

2026/9/5 17:29:37

简介:FZ-PanDA5.72版是一款面向工业自动化工程师、机器人视觉系统集成人员及智能制造领域技术人员的专用仿真软件,聚焦机器人视觉引导任务的建模、调试与优化,解决CCD图像识别、目标定位、路径规划与多机协同等实际产线部署前的关键验证难题。…

yfinance 请求被 429 限流?代理配置加请求间隔,3 步让数据拉取稳定下来

yfinance 请求被 429 限流?代理配置加请求间隔,3 步让数据拉取稳定下来

2026/9/5 17:09:37

yfinance 请求被 429 限流?代理配置加请求间隔,3 步让数据拉取稳定下来 【免费下载链接】yfinance Download market data from Yahoo! Finances API 项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance 批量拉 5 只股票,第 3…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/9/5 21:15:08

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/9/4 2:39:49

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/9/5 19:28:04

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

大一新生新电脑上手指南:从系统配置到编程入门

大一新生新电脑上手指南:从系统配置到编程入门

2026/9/5 11:09:14

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

微信小程序+SpringBoot+MySQL校园报修系统实战

微信小程序+SpringBoot+MySQL校园报修系统实战

2026/9/5 11:09:14

简介:本资源是一套面向高校计算机专业本科生的毕业设计实战项目,基于微信小程序SpringBootMySQL技术栈构建宿舍报修系统,解决传统纸质报修流程效率低、信息易丢失、响应不及时等管理痛点,适用于校园信息化课程设计、毕设开发与全栈…

校园宿舍报修系统:微信小程序+SpringBoot+MySQL实战

校园宿舍报修系统:微信小程序+SpringBoot+MySQL实战

2026/9/5 11:09:14

简介:本资源是一套面向计算机专业本科生的毕业设计实战项目,基于微信小程序前端、SpringBoot后端与MySQL数据库构建宿舍报修管理系统,解决高校后勤维修流程中信息分散、响应滞后、人工登记易错等实际问题。压缩包共744个文件,含10…

远程协作的工作台整理

远程协作的工作台整理

2026/9/3 6:56:24

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/4 7:42:10

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/4 18:49:25

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…