- 博客(20)
- 收藏
- 关注
原创 ndk:调试&日志
一、概述本文档会介绍如何通过native接口写入安卓日志,以及调试的一些技巧。二、日志 日志的使用方法 通过该方式写得日志,会被重定向到logcat里a) Android.mk加入模块编译b) 文件里引用#include <android/log.h>c) 调用头文件里提供的相关接口比如:d) ndk-builde) 把libs拷贝到工程目录,并在as里面引入配置项f) java里面调用na...
2022-03-04 14:03:47
376
原创 ndk:jni
一、概述jni即java native interface,是提供给C++用来开发供Java本地调用的一系列支持接口。以下会从这几个方面来介绍: 类型对应&使用 成员方法(静态/非静态)调用&&成员变量赋值 异常 局部引用&全局引用 线程 二、类型对应&使用基本类型:引用类型:注:基本类型的数据,可以直接使用,但是引用类型不能,必须使用jni的api来存取 字符..
2022-03-04 13:58:23
137
原创 ndk:概述/项目结构/开发流程
一、概述ndk,native develope kit,是安卓提供的一套jvm调用本地C++接口的一套机制,支持在windows以及linux下面进行开发编译。二、NDK提供了什么 ndk给C++提供了一系列C++调用jvm的接口(jni) 交叉编译工具链 输出供安卓jvm使用的.so或者.a文件 三、NDK的项目结构 Andriod.mk:描述需要纳入编译的文件,以及一系列编译参数 Application.mk:描述编译参数 ...
2022-02-28 11:19:01
3456
原创 duilib:从底层分析duilib的大致实现逻辑
按我理解,概括起来,总体包括几个部分,注册窗口,创建窗口,创建控件树,绘制,消息机制。创建窗口&&注册窗口:1. RegisterWindow指定一个静态回调函数WndProc2. CreateWindowEx最后一个参数把自己当作参数传递过去3. WndProc收到WM_NCCREATE消息后,转换一下tagCREATESTRUCT,获取创建的窗口句柄hWnd还有上一步提供的参数lParam,通过SetWindowLongPtr把hWnd,lParam保存下来
2022-01-06 16:04:50
955
2
原创 C++:每天一个挨打小技巧-利用模板做一个高可用的windows命令行解析接口(续)
今天继续来增加挨打技巧,前面写到的一个命令行解析其实可以更狠一点,可以支持所有基本类型的入参解析(后续读者需要新增自定义类型的话也可以自己拓展)下面贴上源码,其中有个接口需要自己实现,CStringUtil::split就是分隔字符串里面内容的。#pragma once #include <deque>#include <typeindex>#include "string_util.h"class CmdHepler{public: template&l
2021-08-07 11:08:59
159
原创 C++:每天一个挨打小技巧-利用模板做一个高可用的windows命令行解析接口
在日常windows开发过程中,很多时候需要调整我们的命令行参数的个数,以下通过模板的特性,设计一个高可用的命令行解析接口。实现:#pragma once class CmdHepler{public: template<typename Tup> static void get_cmd(Tup& tup) { std::vector<std::string> params; int nArgs = 0; LPWSTR *szArglist =
2021-08-06 16:30:09
172
原创 duilib:设计一个“长度不够,按钮来凑“的duilib布局控件
本控件主要为了支持布局内元素很多,但是又不想显示滚动条,意图通过按钮来控制布局滚动的情形。效果图如下:当布局高度足以容纳所有子控件时:当布局高度不足以容纳子控件时:并且上下按钮支持点击翻页功能。主要实现思路:1. 控件构造的时候,把上下两个按钮以及中间的布局给添加到控件里。2. 控件处理绘制事件的时候,通过判断中间的布局滚动条的显示状态来隐藏/显示上下按钮。3. 托管上下按钮的点击通知。4. 由于需要滚动条显示属性的支持,因此只能把滚动条的宽度设置为...
2021-07-26 10:15:01
311
原创 duilib:设计一个高可用,支持uri下载的duilib控件
先喵两句,本文只是提供一个具体思路,直接copy肯定编译不过,需要自己实现以下接口:1.uri下载接口2.主线程调用接口(如果可能的话)3.线程池duilib默认没有支持uri图片的控件,很多业务逻辑都需要自己实现,因此就有了以下的大胆想法,由于图片下载/显示的逻辑都很雷同,没必要一个个继承,然后重复写一套逻辑,显得代码很冗余,于是就有了以下想法,直接用模板类来实现这些接口。代码上面也会有相应的注释,将就着看吧:.h文件:using namespace std::tr2;...
2021-07-24 00:28:18
166
原创 C++:实现支持传参的PPL调用
#prama oncetemplate<typename T>class Task;//偏特化Tasktemplate<typename R,typename... Args>class Task<R(Args...)>{public: using func_type = std::function<R(Args...)>; Task(func_type&& func) : m_fn(std::forward.
2021-06-08 12:37:33
214
原创 C++:C++11里std::thread的那些坑
1. join()函数std::thread里面提供了join函数,等待线程返回,这个本没有什么问题,在C++14以上的SDK版本编译下,这个都没啥问题。但是,在C++11的SDK版本下面编译时,如果在析构函数里面调用join()就要注意了的,假如你是个局部变量还好说,假设你的变量生命周期时整个程序,那么在析构函数里面调用join(),在推出程序时,就会导致进程崩溃(同样的操作在C++14以上完美运行)...
2021-05-10 16:09:47
1450
原创 C++:enable_if与模板偏特化的学习与实践
由于项目的的旧代码不堪入目,只能一块块进行重构,最近找一个结构换json的开源库xpack,为了方便使用,对他封装了一下。但是并不是所有结构体都可以直接使用xpack生成json串,结合最近学到的新东西,我对封装类进行了改造。话不多说,先上代码:#prama oncetemplate<typename T>struct is_x_pack{ template<typename U,typename = decltype(U::xxx)> struct H
2021-05-01 13:26:45
548
原创 win32:DLL以及lib的区别
最近一直在研究项目重构的事情。考虑把所有模块都做成dll的方式让主进程加载:1.静态库存储全局共享变量2.dll存储全局共享变量经过实验发现,如果把静态库编译到dll,exe里面,各自都会保存一份静态库全局变量的拷贝。无法做到数据共享。因此第一个方法行不通。后来对第2种做了实验,发现可行。...
2021-04-25 23:01:10
130
原创 C++:主线程异步调用
.h#pragma once#define SEND_TASK(...) _message_loop_win.SendTask(__VA_ARGS__)#define POST_TASK(...) _message_loop_win.PostTask(__VA_ARGS__)#define POST_DELAY_TASK(...) _message_loop_win.PostDelayTask(__VA_ARGS__)#define CURRENTLY_ON_TID_UI
2021-04-15 20:17:09
716
原创 C++:实现mvvm
最近做了一段时间WPF,印象最深刻就是里面的mvvm模式,打算用C++做一个雏形,并为以后的项目做准备。首先讲一下我对mvvm的理解(可能会有偏差,各位大佬可以指点),mvvm其实可以分开理解为 model , view ,viewmodel 。model提供数据模型,view就是ui,viewmodel做一些跟ui无关的逻辑(更新数据等),跟传统的mvc对比,control很难摆脱与view的耦合,比如更新ui元素等,长期下来,controler的代码只会越来越臃肿。mvvm是一套基于数据绑定的设计模
2021-03-02 00:04:24
3048
3
原创 C++:跨模块调用服务
跨模块调用是一个比较头疼的问题,往往因为模块耦合性比较强,使得代码逻辑比较复杂。1. 如何能实现跨模块调用,又不互相耦合?通知者不关心谁需要处理该消息,处理者也不一定需要知道是谁发送了此消息。windows自带的消息机制刚好可以解决该问题,但是此消息机制有几个致命的缺点:一,必须有窗口支持,当然该部分逻辑可以注册一个虚拟窗口来处理,但是也为编码带来了很大阻碍。二,更致命的是,消息队列在资源紧缺的情况下,还会出现消息丢失的情况。但是PostMessage这个思维还是值得推广的。..
2021-02-09 00:35:11
676
转载 关于linux下/sys目录
sysfs 是 Linux 内核中设计较新的一种虚拟的基于内存的文件系统,它的作用与 proc 有些类似,但除了与 proc 相同的具有查看和设定内核参数功能之外,还有为 Linux 统一设备模型作为管理之用。相比于 proc 文件系统,使用 sysfs 导出内核数据的方式更为统一,并且组织的方式更好,它的设计从 proc 中吸取了很多教训。本文就 sysfs 的挂载点 /sys 目录结构、其与
2013-04-13 15:00:37
1590
转载 linux下的/proc/目录
1. /proc目录Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文
2013-04-13 14:47:45
430
原创 移植QT
QT移植,首先移植tslib1.tslib移植 1.1 解压源码: 1.2 cd tslib, ./build.sh 1.3 在/opt/arm/tslib里就是生成的目标文件 2.qt移植 2.1 解压源码 2.2 首先看一下build.sh脚本,看一下注释内容 ,添加 -lts到qmake.conf文件,然后再执行./build.sh 2.3 make
2013-04-12 14:09:21
753
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人