自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大坡3D软件开发

自主操作系统和CPU--用软件和芯片来改变世界

  • 博客(2917)
  • 资源 (44)
  • 收藏
  • 关注

原创 (28)Blender源码分析之顶层菜单的安装应用模板菜单

可见这里的text是定义菜单项上显示的内容。就是说当加载这个类PREFERENCES_OT_app_template_install时,就会生成操作项。同样的原理,从菜单字符串转换到类是程序内部来实现的。所以当用户点击上面的菜单,就会生成一个事件,而这个事件就去寻找对应的操作项。菜单,现在就来简单地分析一下这个菜单,以便我们对这个菜单的调用进行理解。它是在文件路径:blender\source\blender\windowmanager\intern。...

2022-08-10 22:36:26 614

原创 (27)Blender源码分析之顶层菜单的关于对话框

首先是找到图片的来源,它就是通过datatoc_blender_logo_png来找到显示的png图片数据,然后采用IMB_ibImageFromMemory函数来把png图片解压,生成内部的IMBUF数据,这样才能显示。接着通过函数UI_style_get_dpi()获取UI的类型,有了UI的类型,就可以得到界面布局的像素大小,再通过像素的大小来计算对话框的宽度。以后所有显示UI的代码大体相同的,这里有图片显示、有字符串显示,也有菜单显示,这些都是构造UI界面的基本单元。...

2022-08-03 21:46:34 597

原创 (26)Blender源码分析之顶层菜单的关于菜单

这行代码就是显示AboutBlender菜单项,同时也定义了响应这项菜单的操作,就是打开wm.splash_about项的菜单内容,而在前面分析可知,会把这项内容转换为WM_OT_splash_about,这样就可以在代码找到关联的菜单显示内容了。当用户选择上面的菜单时,就会找到当时根据WM_OT_splash_about创建的菜单项,然后根据菜单项找到对应的响应函数,接着就会调用wm_about_invoke函数,它是通过内部函数wm_operator_invoke来实现的。是这个菜单项显示的名称;...

2022-07-30 14:39:11 649

原创 (25)Blender源码分析之顶层菜单Blender菜单

显示是符合上面的函数调用规范,因此必然进入上面的函数,但是我们会感觉得比较奇怪的是函数的参数wm.splash_about,如果你直接拿这个参数去代码里查找,是找不到这个关联的菜单对象。当运行python代码时,通过layout对象查找operator函数,就会遍历上面的RNA对象,然后就会调用UILayout_operator_call函数,这样就可以找到操作对象内容。前面分析顶层BAR菜单的显示,已经它是由TOPBAR_HT_upper_bar类来构造出来的,接着它会由一些项来构成子菜单。...

2022-07-25 22:46:29 882

原创 (24)Blender源码分析之顶层菜单显示代码分析

在draw_left(self,context)函数里,先要获取当前布局对象layout、当前窗口对象window、当前的屏幕对象screen,然后就调用类TOPBAR_MT_editor_menus来显示编辑菜单,然后增加一个分隔条,最后才判断是否全屏显示,如果全屏显示就会多一个返回菜单,否则就显示工作区菜单。当在python代码里定义为TOPBAR时,在运行python代码那时,就会通过上面的数组找到对应的类型,这样就转换为内部类型的识别了,就可以区分这个类到底是顶层菜单条,还是状态条等等。...

2022-07-24 21:32:18 880

原创 (23)Blender源码分析之python里的基类Header分析

不过要理解菜单的显示,就需要理解python里的基类Header,因为其它菜单都是继承这个基类,这样就可以使用这个基类的属性。所以在python里顶部的BAR、菜单、面板都是采用这种方法来派生出来,然后分析类的基类时,就可以找到对应的结构,再通过结构里的指定的函数进行对应的操作。通过TOPBAR_HT_upper_bar类来定义顶部的菜单条,但是它是继承基类Header,而这个基类Header又是什么呢,为什么需要继承它?那么这个菜单的代码又是在哪里定义的呢?...

2022-07-22 18:45:00 532

原创 (22)Blender源码分析之鼠标按下消息到窗口调用过程

通过上面的分析,我们明白了在UI创建时先要关联消息处理的函数,当用户按下鼠标按键,就会触发一个消息到系统里,接着系统就会发送给Windows窗口,blender从Windows窗口再拿到消息,然后再次转发送到自己的界面窗口,最后通过遍历自己的窗口消息队列实现消息处理。这时调用函数ghost_event_proc来处理,它会找到这个事件的窗口,然后再把这个消息添加到窗口消息队列,等待后面再进行处理。这个函数wm_block_close就会比较熟悉了,它是闪屏里设置当点击窗口的图片时调用的函数。...

2022-07-17 23:12:49 544 2

原创 (21)Blender源码分析之鼠标按下消息添加到队列的过程

前面分析闪屏窗口显示,从图片的加载到菜单的布局显示,从C代码到python代码的相互调用,再到整个闪屏的UI布局显示。接着下来我们来分析一下鼠标按下的事件处理流程,这样才能明白blender处理Windows消息的过程,才可以明白它的事件处理过程,才可以进一步地添加事件处理。如果熟悉Windows编程,就会对整个事件处理比较熟悉,如下图所示:这个过程已经十几年都没有变化过,这是Windows的消息机制,因此blender在Windows下运行,也省不了这个处理流程。这个过程在前面的文章也有简单地介绍过,在这

2022-07-14 00:30:14 476

原创 (20)Blender源码分析之闪屏窗口的菜单python代码draw的属性和函数对应

在前面我们可以看到闪屏的图片,现在来分析一下图片中菜单的python代码属性、函数与C代码的结构、函数的对应关系,通过这个关系,我们就可以理解python修改的内容,也就是相当于修改C代码里的内容,这样才能明白python和C代码相互合作完成同一件事情,另外通过一层关系,也可以快速地定位代码的功能,可以为增加功能、修改BUG提供一个坚实的基础。layout.operator_context C代码里对应位置代码:文件是rna_ui_gen.c,结构定义是rna_UILayout_operator_con

2022-07-08 19:15:00 366

原创 (19)Blender源码分析之闪屏窗口的菜单python代码draw函数运行过程

在前面我们可以看到闪屏的图片, 很明显看到菜单分成两列布局,如下图所示:在这里我们需要搞懂blender是怎么样能够把菜单控制两列分布,又是通过什么样的方式来与C代码进行沟通的。我们来查看WM_MT_splash类的python代码,会发draw函数的第一行代码是这样:layout = self.layout主要获取布局对象layout,那么这个布局对象又是从什么方来,会让python代码使用的呢?一般情况有两种来源,一种是python代码里定义的,另外一种是在C的python API里定义的。在这里访问的

2022-07-07 20:30:00 606

原创 (18)Blender源码分析之闪屏窗口的菜单python代码属性识别

在前面我们可以看到闪屏的图片,在后面是显示了菜单,因此分析了菜单注册、菜单显示过程,在最后也提到怎么样运行python的代码,但是没有详细地分析菜单的python代码运行过程,在本文里就来解决这个问题,主要就是理解python定义菜单的代码是怎么样运行的,它的类属性又是怎么样获取到,以及它的draw函数调用的对象又是从哪里过来的呢。这一系列的问题解决,才能搞明白python定义菜单的代码,才可以修改这些python代码,从而可以修改blender的菜单内容显示和操作。第一步,我们看到python定义闪屏的代

2022-07-06 18:30:00 497 1

原创 (17)Blender源码分析之闪屏窗口的菜单显示过程

在前面我们可以看到闪屏的图片,也分析了闪屏里显示的菜单来源,但是还没有把整个菜单显示的过程搞清楚。比如说在blender里是怎么调用python的类代码运行呢?在这里闪屏菜单的python的类代码如下:那么你会问这些代码是怎么样运行,又是怎么改变菜单项的布局,又是怎么样区分不同地方显示?在前面也已经分析过,通过import时候会注册python类到一个全局的HASH表,当显示菜单时再从这个HASH表里找出来。注册时候只是把python类代码进行收集和编译,并不会真正地执行,只有当调用python类里的函数运

2022-07-05 18:15:00 476

原创 (16)Blender源码分析之闪屏窗口的菜单从python加载过程

在前面我们可以看到闪屏的图片,已经分析了闪屏下半部的菜单显示,它显示的菜单资源是来自python代码,采用这种方式来实现,就可以不修改C代码,就可以修改菜单的组成。要实现这样的功能,是一个复杂的过程,如果你想把这个功能集成到你的软件里,就需要看看本文,可以参考blender是怎么样实现的。当然,本文只是一个引子,介绍了大体的研究方向,如需要深入地研究,还得自己去研究blender的源码,才能偷一些blender代码到自己的工程里,这样的开发方式肯定快不少,至少比自己没有方向地研究要快上一大捷,毕竟开源这位“

2022-06-28 20:00:00 615 1

原创 (15)Blender源码分析之闪屏窗口显示菜单功能

在前面我们可以看到闪屏的图片,可以看到有下面的菜单在图片后面,如下图:后面这些菜单又是怎么样显示出来的呢,本文就来探索这个方面的问题,由于blender是一套复杂灵活的软件,所以它的菜单系统也是比较复杂的。要想显示一个菜单,需要理解C的代码,也需要理解python的代码,需要两方面的代码相互配合才能显示正确的菜单。如果一开始对这套代码不太熟悉,就会比较麻烦了,很多功能无从谈起。因此,现在就来分析红色框里的菜单,看看这些菜单又是怎么一个过程来显示出来的,当你理解这个过程之后,才可以修改这些菜单的功能,才能定制

2022-06-25 09:02:09 513 1

原创 (14)Blender源码分析之闪屏窗口显示软件版本号

在前面我们可以看到闪屏的图片, 如果你仔细地查看,就会发现右上角上显示有一个版本字符串,如下图所示:很多软件都会有这个版本号,因为一个软件是不断地更新,不断地升级,不断地迭代的过程,所以需要一个特别的标记来查看这个软件的基本功能,是否已经解决了BUG。版本号就是一个很好的方式,到目前为止,还没有别的方法比它更靠谱,因为它是不断地自动递增,并且很好地表示软件发布的顺序,同时也表示了软件是否还在测试过程中。这样就让使用软件的用户来根据自己的实际需求来使用不同的版本,比如有一些想使用新功能的用户,就可能下载最新的

2022-06-09 13:30:00 468

原创 (13)Blender源码分析之闪屏窗口关闭的事件响应

在前面我们可以看到闪屏的图片, 这个图片的创建过程已经分析过,也明白它是怎么得到的,但是我们还需要知道这个闪屏窗口怎么样来关闭的,因为需要释放一些资源,也需要提供一个退出窗口的方式。在本文里,就来关注一下它是怎么来设置一个窗口关闭处理的。可以这个函数wm_block_create_splash里,看到下面这行代码:UI_but_func_set(but, wm_block_close, block, NULL);当我们点击闪屏窗口的空白地方,就会触发这个窗口事件,从而对整个闪屏窗口进行关闭的动作。因此,先来

2022-06-02 19:30:00 479

原创 使用C++库boost的log功能时 error LNK2019: 无法解析的外部符号 “public: static void __cdecl boost::log::v2s_mt_nt6出错

当你使用高版本C++库boost来编译时,如果使用log功能,可能会出现这样的问题,如下图:这时候提示为:error LNK2019: 无法解析的外部符号 "public: static void __cdecl boost::log::v2s_mt_nt6::record_view::public_data::destroy一开始我遇到这个问题,也是百思不得其解,又是度娘,又是科学上网找东西,但是还没有解决。后来深入地看了boost log的介绍,下面的网站:Chapter1...

2022-05-10 13:15:00 1495

原创 C++17开始取消std::codecvt_utf8支持

由于C++17之后取消std::codecvt_utf8的支持,所以UTF8与UNICODE之间进行转换,就需要使用别的方法了。否则代码是编译不过,这时又需要回到WINDOWS底层的API来调用转换了。需要使用MultiByteToWideChar函数来实现,下面就是实现UTF8到UNICODE之间转换:const std::wstring CCaiStep::Utf8ToWString(const std::string utf8){ //std::wstring_convert<std:

2022-05-10 13:00:00 3072 1

原创 (12)Blender源码分析之加载图片的uiDefButImage过程

在前面我们可以看到闪屏的图片,这个图片是通过函数wm_block_splash_image来加载进来的,然后图片就在数据结构ImBuf,这个数据结构保存了图像相关的属性和显示的内容。刚刚有这个图片的数据,还不能在界面上显示出来,因为图片在界面上没有办法进行布局,如果是多张图片,就会重叠在一起,所以需要把图片放入按钮的数据结构里面,这样提供了布局的功能。下面这行代码,就是解决图片放入到按钮的过程,最后得到uiBut对象, uiBut *but = uiDefButImage( bloc...

2022-05-05 18:30:00 482 1

原创 在树莓派里使用C++库boost

由于C++的高性能,在嵌入式或者树莓派这样的系统,采用这样的语言是非常合适的,这样可以在CPU性能不太高的场合,写出处理大量数据和功能的软件,并且运行速度飞快,这样既节省产品成本,又为社会节能作出贡献,因为可以大量节省CPU运算,就可以省电,就可以少浪费化石能源。而对于linux这样的系统,采用boost库就更加方便了,因为很多功能已经进行封装,使用起来更加方便,不容易出错。那么本文,就来介绍一下怎么样简单地使用boost。先要安装boost,可以采用源码安装,也可以使用编译库的方式来安装。采用源码

2022-04-25 09:23:34 1138 2

原创 让树莓派支持C++17开发

时间不断地流逝,到目前已经是2022年了,离2017年已经过去5年了。因此开发语言也与时俱进,慢慢转换到C++17的版本上来了。要想在树莓派里使用更高的版本,需要安装g++10.1版本。GCC支持C++版本如下:下面就来进行这个过程:更新最新的系统$ sudo apt update && sudo apt upgrade -y从库里下载二进制版本$ git clone https://bitbucket.org/sol_prog/raspberry-pi-gcc-.

2022-04-24 12:02:51 1247 1

原创 树莓派上安装protobuf 3.18.2版本

树莓派上安装protobuf 3.18.2版本从网站上下载源码:https://github.com/protocolbuffers/protobuf/archive/refs/tags/v3.18.2.tar.gz解压到目录:protobuf-3.18.2然后更新软件:sudo apt-get install autoconf automakers lib tool curl make g++ unzipcd protobuf-3.18.2/sudo ./autogen.s.

2022-04-22 19:15:00 923 1

原创 (11)Blender源码分析之加载图片的imb_loadpng过程

在前面我们可以看到闪屏的图片,但是还有一个大疑问在这里面,那么就是怎么样把文件图片里的格式数据变换成程序可以显示的内存数据,并且保存在数据结构ImBuf什么位置,以便后面读取显示代码时,知道显示的数据来源。简单地说,要实现界面显示,就是把图片当作背景显示,然后在图片之上再添加文本显示,即可以完成。在分析过程之前,我们先把保存图片数据结构看一下,了解数据加载解压之后保存的位置,这样就更加清晰这个过程了。加载解压之后的数据保存在下面的成员: /* pixels */ /** Image pixe..

2022-04-08 18:30:00 567

原创 (10)Blender源码分析之加载图片的IMB_ibImageFromMemory过程

在前面我们可以看到闪屏的图片,在那里也看到了怎么样加载闪屏图片和显示的过程,但是没有分析从内存里的图片数据怎么样转换为将要使用显示的数据,也就是说仅仅把文件的数据读取到内存,还是不能放到显示内存进行显示的,还需要对文件的类型进行解码,然后才能重构图片的位图出来,才可以把它显示出来。在本文里就来分析这部分的代码,由于闪屏的图片类型是PNG类型,在这里就以这个为例子进行分析。ImBuf *IMB_ibImageFromMemory(const unsigned char *mem,...

2022-03-24 22:00:00 1349 1

原创 (9)Blender源码分析之加载闪屏图片的wm_block_splash_image过程

在前面我们可以看到闪屏的图片,如下图所示:这一个png的图片,blender会从内存里加载这个图片,因为blender在编译时,已经把这个图片生成数据文件,变成一个C语言的数组,然后就编译到EXE文件里面,所以读取图片时,只需要从内存数组读取即可。图片文件名称叫做:splash.png,它在目录:blender\release\datafiles通过配置程序的编译工具,就可以生成下面的文件:splash.png.c这个文件在目录:build_windows_Full_x64_vc16

2022-03-10 18:30:00 475 1

原创 (8)Blender源码分析之创建区域对象UI_block_begin函数

(8)Blender源码分析之创建区域对象UI_block_begin函数在Blender的闪屏里,前面初步分析了uiBlock数据结构,但是还有很多成员并没有说明,因此需要继续对这个结构的成员进行介绍。接着下来通过UI_block_begin函数的分析来了解块区域的创建,才能明白一个弹出式的子窗口是怎么样构造,怎么样实现显示出来的,同时也明白一个OpenGL的UI是需要什么样的基本内容。uiBlock *UI_block_begin(const bContext *C, ARegion *

2022-02-25 18:30:00 674

原创 (7)Blender源码分析之创建区域对象

在Blender的闪屏里,为了弹出一个子窗口,需要调用下面的函数来创建一个子窗口的区域:uiPopupBlockHandle *ui_popup_block_create(bContext *C, ARegion *butregion, uiBut *but,...

2022-02-24 13:15:00 695 1

原创 (6)Blender源码分析之屏幕和区域对象结构

在Blender的设计里,UI是采用单一系统窗口的设计,比如在Windows系统里,只需要创建一个窗口,然后所有的绘制和子窗口都是自己在这个窗口里实现,并且不再使用系统的UI功能,全部是自己通过OpenGL实现。所以在Blender每一个系统窗口采用一个屏幕对象结构--bScreen数据结构来描述,然后在屏幕里再分割子窗口--screen area。因此我们先要来学习bScreen数据结构,才能明白UI是怎么样实现屏幕级别的层次。typedef struct bScreen { ID id;.

2022-02-22 11:13:41 1428

原创 (5)Blender源码分析之上下文的索引结构

(5)Blender源码分析之上下文的索引结构在前面闪屏的显示里,可以看到一个界面的基本组成,包含字体、图片、文本和菜单等等。由于所有屏幕显示的内容都是通过OpenGL来实现,意味着没有现成的GUI系统可以使用了,像大家常用的Windows的GUI是没办法使用的,因为它只使用这个窗口来绑定OpenGL的窗口,所有文本的显示都需要自己从字体里抽取出矢量图片,然后再把每一个字符的图片进行排版显示,所以整个GUI系统是比较复杂的,也会有比较多的细节内容。这里相当于自己实现了一套GUI显示系统,为什么要这样

2022-02-18 20:45:00 983

原创 (4)Blender源码分析之闪屏窗口显示流程

(4)Blender源码分析之闪屏窗口显示流程Blender的UI系统是一个很复杂的系统,要一下子了解整个系统是不可能的,必须一步一步地解决理解整个系统,为了简单,先从Blender显示的闪屏界面开始,这样就可以把可视化的界面进行了解,快速地理解blender是怎么样去设计一个弹出式窗口,怎么运行一个弹出式的窗口。本文要分析的闪屏界面窗口如下:虽然是一个简单的界面,在这里包含了图片显示,文本标签显示,窗口菜单显示等等内容。一、Blender GUI主要有下面几部分组成:1)GHO

2022-02-15 18:15:00 1260

原创 歌曲从DTS转换为MP3的方法

歌曲从DTS转换为MP3的方法在这里主要使用以下软件:foobar2000_v1.6.10.exe 这个可以从下面网站下载:foobar2000: Downloadinglame4.0: lame4.0a14.ziphttps://newsoftdown01.rbread05.cn/down/2021down/12/20/lame4.0a14.zip?timestamp=620b4d73&auth_key=0bf7dbbf67a93690389289229240204e.

2022-02-15 17:58:20 2922

原创 (3)Blender源码分析之OpenGL函数初步

(3)Blender源码分析之OpenGL函数初步ChoosePixelFormat函数:像素格式——PIXELFORMATDESCRIPT、设备上下文、渲染上下文 在OpenGL对窗口进行渲染之前,必须根据渲染需要对窗口进行配置。 需要硬件渲染还是软件渲染? 渲染使用但缓冲还是双缓冲模式? 是否需要深度缓冲区? 是否需要模板、目标Alpha或累计缓冲区? 当为窗口设置这些参数之后,就无法对它们进行修改。为了从一个只有深度缓冲区和颜色缓...

2022-02-08 18:30:00 1162

原创 (2)Blender源码分析之OpenGL基本例子

(2)Blender源码分析之OpenGL基本例子在这个例子里,需要使用两个库,一个库是glew,一个库是glfw。glew库主要用来使用扩展的功能,它的详细说明:GLEW跨平台C++扩展库基于OpenGL图形接口使用OpenGL朋友都知道window目前支持OpenGL1.1函数 OpenGL现都发展2.0要使用些OpenGL高级特性必须载新扩展另外同显卡公司发布些自家显卡才支 持扩展函数要想用数涵数寻找新glext.h,GLEW扩展库再用找函数接口烦恼GLEW能自识 别平台所支持全部

2022-02-07 21:00:00 1348

原创 (76)C#里怎么样选择各种通用类型容器

(76)C#里怎么样选择各种通用类型容器在C#里开发,经常会碰到选择通用类型容器的问题,那么怎么样才能选择一个性能好,又满足各种情况的容器呢,这是一个费脑的问题,因此需要对这个做一些功课,才能有效地使用各种条件下的容器,才能把各个情况处理好,把代码写到恰到好处。比如在单线程的程序里就不需要考虑线程安全的问题了,又或者数据量确认只有几百个就不需要考虑性能的问题了。容器大体选择的标准如下:1、 保存键值对,并且通过键查询,通用容器选择:Dictionary<TKey,TValue&

2022-01-29 18:15:00 864

原创 (1)Blender源码分析之Windows窗口建立流程

(1)Blender源码分析之Windows窗口建立流程在多年以前,普经学习过使用Blender来创建动画,虽然是很简单的动画,但是感觉它还好伟大的,使用很简单,只要拖拉几下,就可以搞定一个动画了。这个软件是一个神奇的存在,就像神一样,一直吸引着我,让我一直想去破解这个谜;也像一个绝色佳人,让人永远向往。不过要一睹这位佳人,不是这么简单的,因为需要穿越高高的山峰,走过漫长时间旅程,又要接受大脑磨炼,同时要忍受住身体长胖的危险。如果你对Blender还是有点不了解,可以看看我以前写的文章,只要

2022-01-29 17:28:27 4131 1

原创 (75)C#里为什么需要通用类型容器

(75)C#里为什么需要通用类型容器在C#里开发,经常会遇到通道类型的容器,比如List<T>类型,这里的T可以是任何类型。但是很多人不知道为什么需要使用通用类型,因为在这之前都可以使用ArrayList类型来保存任何类型的对象。其实这的一切都是为了速度,因为ArrayList保存类型时,都需要把任何类型转换为Object类型,这时就需要对每一个元素进行装箱和拆箱的操作,导致很多无效的代码。为了解决这种问题,就需要引入通用类型的容器,这样就不需要进行装箱和拆箱的操作,代码的效率显然就会提

2022-01-28 18:15:00 769

原创 (74)C#里怎么样调用WIN API的函数时实现回调函数

(74)C#里怎么样调用WIN API的函数时实现回调函数在C#里开发,当你调用WIN API函数或者自己定义的C++库时,需要给调用的函数设置一个回调函数,这时候又需要怎么样来实现呢?在C#里显然使用委托函数来实现回调函数比较简单。比如像下面的C++函数:BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)这里第一个参数lpEnumFunc就是一个回调函数。在这里使用下面的代码来声明一个回调函数:public

2022-01-28 13:15:00 432

原创 Administer FileZilla Server安装之后,不能访问的原因

Administer FileZilla Server安装之后,它会自动启动,然后就可以添加用户,但是还是不能访问,刚开始找了一遍都没有找到原因,原来是WIN10带有防火墙,所以需要把这个服务程序添加进防火墙。打开下面的安全中心:选中允许应用通过防火墙。通过允许其它应用就可以添加,比如安装目录如下:把这个程序添加进去。就可以通过别的电脑来访问这个FTP服务器了。...

2022-01-27 09:05:58 2277

原创 (73)C#里怎么样调用WIN API的函数时传送结构或指针对象

(73)C#里怎么样调用WIN API的函数时传送结构或指针对象在C#里开发,当调用WINAPI函数时,需要向函数传送一个结构体作为参数,这时候又需要怎么样来处理呢,这种结构体又需要怎么样定义,是否可以使用类来代替呢?面对这些问题,如果是新手,就是触手无策。到处去寻找方案,往往也是一无所获。因此,开发人员需要在平时去练习解决这样的问题,而不是等到使用时候再去了解,这样就可以快速地解决自己开发的问题。第一步先要定义结构: [StructLayout(LayoutKind.Sequen...

2022-01-26 18:30:00 890

原创 (72)C#里怎么样调用WIN API的函数

(72)C#里怎么样调用WIN API的函数在C#里开发,如果经常在Windows平台开发,就避免不了使用WINAPI函数,因为这是Windows系统的基础。不过在WINAPI函数里,又存在两个版本,一个版本是ANSI单字节的版本,一个版本是双字节UNICODE的版本。如果想指定调用那个版本的函数,又是怎么样实现的呢,本文将来解决这个问题,一般情况可以看有两个版本的函数如下:MessageBoxA 这个是单字节版本。MessageBoxW 这个是双字节版本。要想在C#里选择...

2022-01-26 18:15:00 656

python抓取天气并分析 实例源码

Python代码抓取获取天气预报信息源码讲解。这是一个用Python编写抓取天气预报的代码示例,用python写天气查询软件程序很简单。这段代码可以获取当地的天气和、任意城市的天气预报,原理是根据url找到网站截取相应的数据展现。 python抓取广州天气并分析 实例源码

2017-08-28

wix3.11版本安装工具

wix3.11版本安装工具

2017-06-19

WiX3.10版本安装工具

WiX3.10版本安装工具

2017-06-19

GOOGLE的TPU论文

GOOGLE公开TPU的论文

2017-04-06

深度强化学习论文

DQN的论文

2017-03-17

书《深度学习》

2015年,深度学习三大牛Yann LeCun、Yoshua Bengio和Geoffrey Hinton在最新的《Nature》杂志首次合作的发表综述文章《Deep Learning》。本文为该综述文章的中文译文,深入浅出地介绍了深度学习的基本原理,核心优势和未来展望。

2017-03-13

手写识别的训练数据

MNIST训练数据

2017-03-10

俄罗斯方块游戏开发

俄罗斯方块游戏开发培训里的可执行文件,让大家可以查看相关的结果。以便是否参加培训。

2016-11-30

duilib界面库20161116

更新为VC2015编译的duilib,持续重构代码,使用最新的C++14的语法。

2016-11-16

duilib界面库20161017

duilib 界面库

2016-10-17

duilib界面库

duilib界面库,长期维护的界面库,在WIN10和VS2012上编译和开发、测试通过。

2016-10-10

国产8051模拟器

一款国产的8051模拟器(全部源代码) 本软件是一款8051模拟器,他的特点是可以模拟多处理器平台,在简单的多工作区间的界面上可以很方便的模拟8051处理器, 最重要的是这个单片机系统可以完全由你自己订制,你甚至可以随意创建自己的多单片机系统,什么SMP 基于串行总线的分布式系统,集群式系统,只要你能想到的,都可以办到,充分发挥你的想象力。现在1.0版本已经基本体现出了这种思想,在以后的版本中将使这一特性变的 更加强大!

2016-09-10

mysql开发管理工具

mysql数据库的开发管理工具。

2016-07-12

mysql-5.5.50-64

windows下的64位MYSQL的版本。

2016-07-10

python-3.4.4

python 3.4的32位的windows版本

2016-07-01

tinyxml2配套源码

在软件开发过程中,为了使软件有灵活的配置,特别像界面这样的配置,同时为了减轻重复开发的任务,需要把客户的个性化需求可以通过配置文件来修改,比如像界面的颜色配置,就可通过配置文件来修改,这时就可以采用XML文件来保存和修改这些参数配置。在不同软件之间进行通讯时,也可以采用XML协议来进行数据交换,特别像WEB服务的调用时,采用传送XML格式是基本的数据交换方式。基于这些任务的需求,需要软件开发人员会在C++里使用xml格式。

2016-06-27

protoc2.5执行文件

protoc执行文件

2016-06-24

protobuf 2.5

protobuf 2.5库代码和工具

2016-06-24

selenium的浏览器驱动

目前有很多的银行网站,还是以IE为标准的浏览器,因此这里主要采用IE为测试的例子,在这里可以下载不同版本的浏览器驱动,可以是32位的,也可以是64位的,根据自己的需要下载不同的版本。在本文章里,下载的是2.35.3版本:IEDriverServer.exe,把它放在目录f:\temp\里面。

2016-06-14

WIX制作C#应用程序安装包

WIX制作C#应用程序安装包

2016-05-26

开源鸿蒙4.0不能进入桌面的补丁

系统启动后进入不到桌面 当前系统有 bug,当出现此种问题时,需要执行 killall com.ohos.launcher。 里面的hap文件替换applications\standard\hap\下的同名文件。 目录 oh/applications/standard/hap

2024-03-17

开源鸿蒙 4.0 RK3566开发板配置

开源鸿蒙 4.0 RK3566开发板配置 https://mysoft.blog.csdn.net/article/details/136779805

2024-03-17

使用WeifenLuo.WinFormsUI.Docking的简单例子

使用WeifenLuo.WinFormsUI.Docking的简单例子,演示了简单地使用这个窗口布局库。

2021-12-10

hui_test_form.rar

H-ui.admin_v3.1.3.1的学习和测试例子,前端代码的经典。

2021-08-17

python_example.rar

pybind11的安装和编译的例子,可以快速地生成安装包。

2021-06-24

Mysql_20210615_1.rar

演示访问Mysql库的C++类库QTL

2021-06-15

TestSel1.rar

爬虫日记(28):scrapy使用中间件调用浏览器 相关代码

2021-03-29

ItemDemo_ua.rar

爬虫日记(25):Scrapy 中设置随机 User-Agent 二 的配套代码

2021-03-26

爬虫日记 Imgfn1.rar

爬虫日记(23):用scrapy快速地爬取蜂鸟网图片 相关的项目代码

2021-03-24

ImgDemo1.rar

爬虫日记(22):最简单地抓取图片,仅5行代码 相关配套代码。

2021-03-23

ItemDemo3.rar

爬虫日记(21):使用Pipeline模块写入文件二 的配套代码。

2021-03-23

ItemDemo2.rar

爬虫日记(20):使用Pipeline模块写入文件 的例子

2021-03-22

ItemDemo.rar

实例使用Item对象,适用初学者,《爬虫日记》配套源码。

2021-03-21

svm_hog_data.rar

使用到LineSVC里进行机器学习的训练数据,用来训练手写识别。 配套专栏文章使用,https://blog.csdn.net/caimouse/article/details/104599920。

2020-03-02

实现numpy的C++库扩展

使用C++来扩展numpy里的数据计算,这时就需要使用numpy的扩展库功能了,下面就来提供一个使用C++编写numpy扩展库的模板,这样大家就要减少很多弯路,减少跌入坑里的成本。这个扩展库的模板是从mahotas库里抽取出来的,经过最大化的简化,这样更加容易理解,更方便学习。

2019-11-24

STM32F407VET6工程模板

玩转STM32里文章配置的代码,这里学习的第一个工程代码,可以作为后继开发的模板工程。

2019-03-14

python web py入门配套源代码

python web py入门- 实现论坛,开发技术:后端采用Python+web.py+MySQL,前端采用HTML+CSS+JavaScript+jQuery+RequireJS。

2018-02-23

webpy演示例子1

webpy演示例子1, 用于配套文章相关资源。python web py入门(9)- 论坛首页的模板中模板 前面已经提到一个模板中可以套用另外一个模板,现在就来看看这个论坛基本布局模板是怎么样的?

2018-02-21

胶囊模型的代码

胶囊模型的代码在以下论文中使用: “Dynamic Routing between Capsules” by Sara Sabour, Nickolas Frosst, Geoffrey E. Hinton. 要求 TensorFlow ( 访问 http://www.tensorflow.org 了解如何安装和升级) NumPy (详见http://www.numpy.org/) GPU

2018-02-02

C++读写json文件

https://github.com/nlohmann/json 最好用的C++读写json库

2017-12-09

空空如也

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

TA关注的人

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