自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 资源 (2)
  • 收藏
  • 关注

原创 enable_if在模板类中的一个使用场景

类模板与enable_if

2023-05-15 08:39:00 108

原创 如何调试windows运行时库

运行时库调试

2022-12-08 11:22:29 265

原创 一个函数搞定二叉树非递归前中后序遍历

一个函数搞定二叉树的非递归的前序,中序,后续遍历

2022-07-16 21:19:02 214

原创 三个线程轮流输出

C++ 实现三个线程轮流打印A,B,C

2022-06-18 08:49:48 172

原创 关于C# NPOI处理Excel之后close不保存修改的问题

最近需要处理Excel文件,选用了NPOI发现两个问题:(1)对IWorkbook调用close之后对excel做的修改不会保存到对应的excel文件(2)针对第一个问题,网上说需要将IWorkbook写入到源文件中,我试过了,如果IWorkbook调用write写入到同一个文件,可能会出现文件损坏的问题针对以上问题,利用装饰者模式进行了解决:using NPOI.SS.UserModel;using NPOI.XSSF.UserModel;using NPOI.HSSF.Us

2022-02-27 11:02:46 1574

原创 C++构造函数和析构函数中调用虚拟函数

C++ 析构函数 构造器 虚拟函数

2022-01-16 18:33:38 1943

原创 C++ 模板实现单例

#pragma oncetemplate<typename T>class Singleton{public: static T* GetInstance() { if (m_sInstance) { m_sInstance = new T(); } return m_sInstance; } Singleton(T&&) = delete; Singleton(const...

2021-09-07 12:31:19 243

原创 C++ 编译期确定一个类型是不是整型(_Is_any_of_v)

譬如有一个类型T,我们需要知道他是不是整数(int,short,char,long等等),有两种实现方式:第一种应该是比较容易想到的,利用模板偏特化实现。template<class T>struct My_Is_Integer{ using type = std::false_type;};template<>struct My_Is_Integer<int>{ using type = std::true_type;};tem

2021-07-19 20:55:15 1193

原创 C++ 虚函数表 Hook

当C++类中函数虚函数时,为了实现多态,C++类最开始地方会包含一个指针,该指针指向虚函数表,当我们修改这虚函数表里地址就达到了实现虚函数表Hook的目的。代码如下:#include "VTblHook.h"#include <iostream>#include <Windows.h>class MyBase{public: MyBase(int a,int b):m_ia(a),m_ib(b){ } virtual void __cdecl Te

2021-07-11 17:17:52 597

原创 虚拟内存分析

本篇文章主要目的是对进程的用户地址空间进行一个分析。先来了解一些概念:区域,块,页面。用户地址空间划分为不同的区域,然后区域划分为不同的块,块由页面组成。(如果区域是MEM_FREE,则不存在块的概念)区域中的块是该区域内连续的页面,并且具有相同的保护属性以及以相同类型的物理存储器作为后备存储器。分析用户地址空间区域,主要要用到VirtualQueryEx函数,该函数声明如下:DWORD VirtualQueryEx(HANDLE hProcess,LPCVOID pv.

2021-03-14 18:43:38 561

原创 异或的一个使用场景

异或符号在某些场景下使用非常方便。场景:判断两个字符组数,要么同时为空,要么同时不为空。两种实现: char name1[20] = ""; char name2[20] = "1"; //第一种判断方式 if ((name1[0] == '\0' && name2[0] == '\0') || (name1[0] != '\0' && name2[0] != '\0')) { } //第二种判断方

2021-03-04 09:27:18 368

原创 获取结构体某个字段地址的偏移

#define STRUCTFILEDADDR(T,Field) \(long long)(&(((T*)0)->Field))

2021-02-18 08:44:17 256

原创 std::set存储自定义结构体时,如何定义比较函数

#include <iostream>#include <set>struct MyStr{ int a; int b; int c;};struct MyStrCmp{ bool operator()(const MyStr& my1, const MyStr& my2)const { if (my1.a != my2.a) return my1.a < my2.a; .

2020-11-22 21:05:44 1109

原创 非侵入C++ ORM

最近工作中需要将一些信息保存到数据库,由于使用的是C++,没有反射机制,所以对应的ORM库非常少,手写sql又非常麻烦,这个时候非常羡慕java,C#等语言可以在编译的时候就将字段信息等编译到可执行文件中,因此可以非常轻松的实现反射,也有非常多好用成熟的ORM库。本文主要是利用C++的宏和模板来实现非侵入式简单的C++ORM的功能(主要是针对sqlite数据库)(1)要利用C++实现反射,最主要的是可以获取C++结构体各个字段的字段名,字段类型。我在网上找到一段如下的宏可以很好的解决这个问题。

2020-08-10 21:08:52 1308 6

原创 介绍一个VS插件TimeStampMargin,可以打印output中输出时间戳

1 安装TimeStampMargin,该插件是免费的,在Vs中的插件管理中直接搜索就好了。2 由于它是对output中输入的内容显示时间,因此需要使用OutputDebugString这个函数在output中打印信息3 使用OutputDebugString需要引入两个头文件windows.h,debugapi.h,仅仅debugapi.h不行,因为该头文件中需要的宏在windows.h...

2020-04-12 15:51:18 671

原创 C++统计程序运行时间的类

这个类统计代码真正运行的时间,如果代码运行过程中cpu被剥夺了,那么被剥夺的那段时间是不计算在内的。class CStopwatch{public: CStopwatch() { Start(); } __int64 Now() const { LARGE_INTEGER liPerNow; QueryPerformanceCounter(&liPerNo...

2020-02-29 19:42:01 627

原创 远程线程注入DLL-读取指定进程中的模块

步骤:(1)用VirtualAllocEx函数在远程进程的地址空间中分配一块内存(2)用WriteProcessMemory把函数DLL的路径名字复制到第一步分配的内存中(3)用GetProcAddress函数来得到LoadLibraryW或LoadLibraryA函数在Kernel32.dll中的实际地址解释下为什么可以这么做:*为什么可以直接用GetProcAddress获...

2020-02-08 12:56:24 1153

原创 在CUI程序中调用GetMessage可以正常使用吗?

可以,调用GetMessage之后该线程转换为GUI线程,有自己的消息队列。创建一个子线程,然后通过各自的消息队列来实现线程之间消息的传递。#include "framework.h"#include <string>#include <iostream>#define MSG_USER_OK 1234#define MSG_USER_EXIT ...

2020-02-07 09:36:36 256

原创 windows挂钩注入DLL---获取桌面上所有图标名称及位置

(1)HHOOK是全局唯一的,可以跨进程使用(2)当创建钩子指定的函数第一次执行的时候,会创建一个线程(3)当一个线程调用GetMessage的时候会转换为GUI线程,会有一个对应的消息队列,可以通过这个消息队列来传递我们的指令(4)往某一个指定线程发送消息用PostThreadMessage(5)当卸载钩子的时候,要确保我们在钩子函数中创建的消息退出,因为卸载钩子会导致DLL卸载...

2020-02-06 21:18:33 556 3

原创 利用RevitNET.dll后台操作rvt文件

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Reflection;using System.Text;using System.Threading.Tasks;using Autodesk.Revit;using Autodesk.Revi...

2020-02-06 21:03:25 2958 3

原创 Revit二次开发之“PromptForFamilyInstancePlacement()函数动态拖动/鼠标跟随”效果

//跟随鼠标拖动效果[Transaction(TransactionMode.Manual)][Regeneration(RegenerationOption.Manual)]public class DragElement : IExternalCommand{ public Result Execute(ExternalCommandData cmdData, ref str...

2020-02-06 20:36:19 1196

原创 利用IO完成端口实现文件复制

首先实现一个句柄自动关闭的类EnsureCloseFile以下是头文件#pragma once#include <windows.h>class EnsureCloseFile{public: EnsureCloseFile(HANDLE hHandle); ~EnsureCloseFile(); EnsureCloseFile(const EnsureCl...

2020-01-04 20:45:22 349

原创 获取Revit模型中构件几何之间的引用关系

Revit SDK给我们提供了接口IExportContext用于将模型导出,从接口中我们可以获取每个构件的三角片信息,材质信息,只需要将每个构件三角片化即可。但是当模型较大的时候就会发现导出速度慢,导出的文件较大,这个时候有没有办法提升导出速度,减少导出文件的大小呢?是有这样的办法的,Revit在内部存储构件的几何信息时,相同几何的构件只存储的一份几何信息,这样子可以减少rvt文件大小。(1...

2019-07-22 13:31:15 2159 1

VMAnalyse.cpp

对指定进程号的进程进行内存分析,如果该内存关联一个文件,可以输出该文件

2021-03-14

CPlusReflection20200810.zip

利用宏和模板实现静态的C++ ORM(针对sqlite,可以自己修改为其它格式)

2020-08-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除