本站提倡有节制游戏,合理安排游戏时间,注意劳逸结合。

【火星科技cesium源码】【蚂蚁分类5.9源码】【php教育门户源码】动态链接生成器源码_动态链接生成器源码怎么用

2024-11-30 05:30:18 来源:娱乐 分类:娱乐

1.小程序码生成器有哪些?小程序短链接生成器入口在哪?
2.通过 EmbededFileProvider 实现 Blazor 的动态静态文件访问
3.一个简单好用的活码二维码生成器——二维彩虹!
4.稳定的链接短链接生成器入口在哪?短链接在线生成器好用吗?
5.Cpp项目文件结构及使用CMake构建Build过程解析
6.如何编译SQLite-How To Compile SQLite

动态链接生成器源码_动态链接生成器源码怎么用

小程序码生成器有哪些?小程序短链接生成器入口在哪?

       实现小程序码转二维码的步骤如下:1. 在虾果中选择“小程序码转二维码”功能,并上传小程序码。生成2. 虾果会自动生成一个二维码,器源用户可以通过扫码访问小程序。码动虾果中的态链火星科技cesium源码小程序短链接生成器网页入口在“主页”中,用户可以在“主页”中选择“短链接生成器”按钮,接生进入小程序短链接生成器网页入口。成器在小程序短链接生成器网页入口中,源码用用户可以输入要生成的动态短链接的网址,选择链接类型(如静态链接或动态链接),链接还可以设置链接的生成权重和有效期等参数。生成的器源短链接可以直接在网页中访问,方便快捷。码动虾果的态链小程序码转二维码和小程序短链接生成器功能,可以为用户提供便捷的引流服务,帮助用户将小程序链接到更广泛的场景中,提高小程序的曝光率和用户量。

通过 EmbededFileProvider 实现 Blazor 的静态文件访问

       重构独立博客,是今年计划之一。这个基于 Hexo 的静态博客,从年开始搭建,陪伴博主走过毕业、求职和而立之年。尽管尝试过 Jekyll 和 Hugo 这样的静态博客生成器,但由于模板和插件等周边生态,这个想法一直被搁置。最近,突然涌现出通过 Blazor 重写博客的想法,尤其是它对 WebAssembly 的支持,以及类似 Vue 和 React 的组件化开发模式,在开发体验上有着同样不错的表现。因此,今天这篇博客就来聊聊在重写博客过程中的一点收获,即如何让 Blazor 访问本地的静态文件。

       从内嵌资源说起。首先,我们要引入一个概念,蚂蚁分类5.9源码即内嵌资源。我们平时接触的更多的是本地文件系统或 FTP、对象存储等运行在远程服务器上的文件系统,这些都是非内嵌资源。内嵌资源主要指那些没有目录层级的文件资源,因为它会在编译时“嵌入”到动态链接库(DLL)中。一个典型的例子是 Swagger,它在.NET Core平台下的实现是 Swashbuckle.AspNetCore,它允许使用自定义的HTML页面。这里使用到了 GetManifestResourceStream() 方法,其实就是一个内嵌资源。

       关于内嵌资源,我们有两种方式来定义它。这样,我们就完成了内嵌资源的定义。而定义内嵌资源,本质上还是为了在运行时期间去读取和使用,那么,自然而然地,我们不禁要问,该怎么读取这些内嵌资源呢?在 Assembly 类中,微软为我们提供了以下接口来处理内嵌资源:GetManifestResourceNames()、GetManifestResourceInfo() 和 GetManifestResourceStream()。为了方便大家理解,这里我们准备了一个简单的示例。

       此时,我们会发现,内嵌资源都是使用类似 A.B.C.D 这样的形式来表示资源路径的,因为内嵌资源本身没有目录层级。现在,如果我们再回过头去看 Swagger 的示例,就不难理解为什么会有 CustomUIIndex.Swagger.index.html 这样一个奇怪的值,因为它对应着实际的物理文件路径,示例代码中输出的资源路径和实际的物理路径存在着对应关系。

       OK,那么在了解了内嵌资源以后,接下来,php教育门户源码我们需要关注的是 EmbededFileProvider。需要说明的是,在 ASP.NET Core 中,微软通过 IFileProvider 接口来解决文件读取问题,典型的使用场景有静态文件中间件、Razor 模板引擎以及 WWWRoot 目录定位等。通常情况下,我们使用 PhysicalFileProvider 更多一点,它和 EmbededFileProvider 一样,都实现了 IFileProvider 接口,所以 ASP.NET Core 可以从不同的来源访问文件信息。

       显然,EmbededFileProvider 正是为了内嵌资源而生,它在内部使用到了 Assembly 类中和内嵌资源相关的接口。所以,除了上面的方式,我们还可以通过下面的方式来访问内嵌资源,需要注意的是,使用 EmbededFileProvider 需要引用 Microsoft.Extensions.FileProviders.Embedded,大家可以比较一下这两种方式的差异。

       除此以外,IFileProvider 还有一个最重要的功能,即 Watch() 方法,它可以监听文件的变化,并返回一个 IChangeToken。有没有一种似曾相识燕归来的感觉?没错,博主曾经在《基于选项模式实现.NET Core的配置热更新》这篇文章中介绍过它,它是实现配置热更新的关键。事实上,FileConfigurationSource 这个类中有一个 Provider 属性,而它对应的类型恰好是 IFileProvider,这难道是巧合吗?不,仔细顺着这条线,我们大概就能明白微软的良苦用心,我们的配置文件自然是来自文件系统,而考虑到内嵌资源的存在,我们面对的什么叫做程序源码文件系统其实是一个广义的文件系统,它可以是物理文件、内嵌文件、Glob、对象存储(OSS)等等。

       好了,千呼万唤始出来,现在终于要讨论 Blazor 这个话题啦!众所周知,静态博客生成器里主要存在着两种配置,即站点配置和主题配置,Hexo 里甚至还支持从特定文件夹里加载自定义的数据。所以,对于静态博客而言,它需要有从外部加载数据这个特性。我们知道,Blazor 分为服务器和客户端两个版本,两者的区别主要在于 Razor 模板由谁来渲染,前者相当于服务端渲染(SSR) + SignalR,而后者则是基于 WebAssembly,它可以直接在浏览器中加载。显然,后者更接近我们静态博客生成器的想法。由于 Hexo 使用 Yaml 作为配置语言,所以,为了读取原来 Hexo 博客的配置,参考《实现自己的.NET Core配置Provider之Yaml》这篇博客实现了一个 YamlConfigurationProvider。

       在使用的过程中,遇到的问题是,它无法识别配置文件的路径。原因很简单,经过编译的 Blazor 会被打包为 WebAssembly,而 WebAssembly 在前端加载以后,原来的目录层级早已荡然无存。此时,基于物理文件的 PhysicalFileProvider 将无法工作。解决方案其实大家都能想到,换一种 IFileProvider 的任天堂源码泄露实现就好了啊!至此,奇妙的缘分产生了:

       其实,官方文档中提到过,Blazor 的配置文件默认从 WWWRoot 下的 appsettings.json 加载,所以,对于像 JSON 这类静态文件,可以注入 HttpClient,以 API 的方式进行访问。例如,官方文档中推荐的加载配置文件的方式为:

       而经过我们这样改造以后,我们还可以这样加载配置:

       一旦这些配置注入到 IoC 容器里,我们就可以纵享无所不在的依赖注入,这里以某个组件为例:

       同样地,对于组件内的数据,在大多数场景下,我们可以这样来处理,还是因为有无所不在的依赖注入:

       这里可以给大家展示下尚在开发中的静态博客:

       理论上任何文件都可以这样做,主要是考虑到配置这种信息,用依赖注入会更好一点,这样每一个组件都可以使用这些配置,而如果是以 API 的形式集成,以目前 Blazor 打包以后加载的效果来看,页面会有比较大的“空白期”。我更加疑惑的是,如果 Blazor 打包后的体积过大,那么浏览器自带的存储空间是否够用呢?一句话总结的话,Blazor 是一个写起来非常舒服的框架,可未来是否会像当年的 Silverlight 一样,这还要看大家对 WebAssembly 的接受程度,可谓是“路漫漫其修远兮”啊……

       本文小结。这篇博客,是博主由一个个“闪念”而串联起来的脑洞,作为一个实验性质的尝试,希望通过 Blazor 的客户端模式(WebAssembly) 实现一个静态博客,而在这个过程中,需要解决 Blazor 读取本地文件的问题,由此,我们引入了这篇博客的主题之一,即 EmbededFileProvider。顺着这条线索,我们梳理了内嵌的文件资源、IFileProvider 接口、FileConfigurationProvider、FileConfigurationSource 等等一系列看起来毫无关联的概念。事实上,“冥冥之中自有天意”,这一切怎么会毫无关联呢?我们最终从文件系统看到了配置系统,聊到了 Blazor 中的配置问题,这里我们熟悉的依赖注入、配置系统都得以延续下来。其实,单单就解决这个问题而言,完全不值得专门写一篇博客,可从一个点辐射到整个面的这种感悟,在人生的成长中更显得弥足珍贵,希望我们每一个人都能多多跳脱出自己的视角,去努力的看一看这个丰富多彩的世界,在多样性与多元化中去寻找整体上的统一,这是作为技术人员的我,一生都想去探索的哲学。好了,以上就是这篇博客的全部内容啦,欢迎大家在评论中留下你的想法或者建议,谢谢大家!

一个简单好用的活码二维码生成器——二维彩虹!

       动态二维码,又称为活码,其生成工具——二维彩虹,无需下载APP,直接在浏览器登录即可使用。在二维彩虹官网输入信息,点击生成即可制作出包含网址链接、PDF文件、电子名片、视频、、文本信息、音频等的动态二维码。

       动态二维码在企业办公、营销活动、教育教学、出版图书等领域广泛应用,且支持个性化设计,包括颜色、样式等。动态二维码与静态二维码的区别主要体现在:静态二维码内容不可修改,不支持复杂内容生成,且不追踪扫描数据;而动态二维码则能随时更新内容、追踪扫描数据,并具备加密功能,为企业办公便利性提供了显著提升。

       在二维彩虹上制作动态二维码的过程简单明了,从登录官网开始,选择动态二维码选项,输入内容,点击生成即可。此外,用户还可以对二维码进行美化设计,如添加品牌logo、调整颜色和边框等。动态二维码能实时采集扫码数据,形成品牌数据库,为数据分析提供支持,帮助企业更好地了解用户行为,调整市场策略。

       二维彩虹不仅提供了动态二维码制作功能,也支持静态二维码的制作。静态二维码内容一经生成,便永久有效,不限扫描次数,完全免费,但无法更改内容,也无法追踪扫描数据,且不支持复杂内容生成。

       二维彩虹二维码生成器支持制作收款二维码、资料下载二维码、语音讲解二维码、图文解说二维码、PPT二维码、PDF二维码、网页二维码、作品集二维码、视频二维码、APP下载二维码、电子名片二维码、问卷调查二维码、导航二维码、微信无限加人二维码、社交媒体二维码、名片二维码、WIFI二维码、文本二维码等。二维彩虹二维码生成器按码收费,无限扫码流量,上传文件空间总量无上限,且支持随时查看和更新二维码内容。

       对于海外用户,QR Tiger提供专业二维码解决方案,支持PDF文件、网址链接、视频、文字、、音频等多样化内容生成二维码。此外,QR Tiger还提供定制服务,满足特殊需求。

稳定的短链接生成器入口在哪?短链接在线生成器好用吗?

       虾果提供的短链接生成器入口非常稳定,可以直接在虾果官网的“短链接生成”按钮中进行访问。该按钮可以直接点击,让用户快速进入虾果的短链接生成页面,方便用户进行选择和生成。而关于短链接在线生成器的问题,虾果的短链接生成器并不是万能的,有些网站和博客的短链接是不被搜索引擎认可的,因此生成出来的短链接可能会无法排名或者无法被用户找到。但是,虾果的短链接生成器仍然具有一定的优势,因为它可以生成符合搜索引擎优化规则的短链接,同时也支持多种不同类型的链接生成,包括静态链接、动态链接、重定向链接等。最后,虾果的短链接生成器使用非常方便,用户只需要输入相关的信息,就可以快速生成自己的短链接,并且可以保存和分享。虾果的短链接生成器功能非常的强大,可以满足用户的各种需求,因此也备受用户的喜爱和使用。综上所述,虾果提供的短链接生成器入口非常稳定,并且可以生成符合搜索引擎优化规则的短链接,同时也支持多种不同类型的链接生成,使用非常方便。但是,用户仍然需要根据自己的需求选择适合自己的短链接生成工具,才能发挥该工具的最大价值。

Cpp项目文件结构及使用CMake构建Build过程解析

       本文将介绍常见的cpp项目文件结构,并展示使用Cmake进行构建的全过程。

       当cpp项目规模逐渐变大时,单一目录下存放所有文件必然显得杂乱难以管理。这些文件通常会包括如项目源代码(.cpp, .hpp), 第三方库(.h, .hpp, 动态链接库等),文档,以及各种中间文件。较为常见的一种文件组织方式如下:

       其中src为项目主要代码所在文件夹,可以下属包含module 1, 2, 等各个子模块。

       根据StackOverflow stackoverflow.com/quest...上的建议,尽量将源代码的.cpp 和 .hpp .h 放在一起,而不要单独设置一个include文件夹存放头文件。 另外,若无必要,尽可能避免使用include文件夹存放公共的头文件,如公用的数学库等。

       关于源文件的命名,可以采用项目名后加功能名的方式,例如

       这就是我们项目的主程序。

       使用CMake的关键步骤是编写CMakeLists.txt。一个最基本的能用来build的CMakeLists.txt需要有以下内容:

       这里为了设置g++编译器,我们使用了set(CMAKE_C_COMPILER, ) 和 set(CMAKE_CXX_COMPILER, ) 。这两行必须在project命令前。在set(EXECUTABLE_OUTPUT_PATH "${ PROJECT_SOURCE_DIR}/bin")中,设置最终生成的可执行文件在/bin目录。CMake保留了几个全局变量,如:${ PROJECT_SOURCE_DIR} 即为当前.txt文件所在的目录,一般为项目主目录。

       参数及路径可以使用“”双引号也可以不使用,后者若有空格则会被识别成多个参数。

       此时,完整的项目结构应该如下:

       其中 ../ 为读取上一个目录的CMakeLists,-G选项为指定Generator。此时在build文件夹出现生成的项目

       生成的项目内容取决于使用何种生成器。若使用Visual Studio则会生成.sln等文件。

       构建命令为在当前目录(build/) 对目标进行构建。最终生成的可执行文件会出现在bin/目录:

       运行MyStep.exe

       运行成功就可以得到 Hello cpp的输出。

       至此一个最小cpp项目构建完毕!之后的笔记会进一步加入

如何编译SQLite-How To Compile SQLite

       SQLite是ANSI-C的源代码。在使用之前必须要编译成机器码。这篇文章是用于各种编译SQLite方法的指南。

       è¿™ç¯‡æ–‡ç« ä¸åŒ…含编译SQLite的每个步骤的反馈,那样可能会困难因为每种开发场景都不同。所以这篇文章描述和阐述了编译Sqlite的原则。典型的编译命令已经作为例子提供了,以期望应用开发者能够使用这些例子作为完成他们自己定制的编译过程的的一个指南。换句话说,这篇文章提供了想法和见解,而不是交钥匙的解决方法。

       èžåˆVS单独源文件

       Sqlite是由超过一百个c源码文件以及众多的目录下的脚本构建的。Sqlite的实现是纯粹的ANSI-C,但是许多C语言源代码文件是由辅助的C程序生成或者转换来的,并且AWK,SED和TCL脚本会融合到完成的sqlite库中。对Sqlite构建需要的C程序和转换和创建C语言源码是一个复杂的过程。

       ä¸ºäº†ç®€åŒ–这些,sqlite也通过一个预打包的合并后的源码文件:sqlite3.c。这个合并文件是一个ANSI-C源码实现整个SQLite库的唯一文件。合并后的文件更容易处理。所有的东西都包含在这一个文件里,所以很容易进入一个更大的C或者C++程序的源码树。所有的代码生成和转换步骤都已经实现了,因此没有辅助的C程序需要去配置和变异,也没有脚本需要去运行。并且,因此所有哭都包含在一个翻译单元,编译器可以做更多高级的优化从而提升5%到%的性能。因为这些原因,融合后的源码文件sqlite3.c对所有程序来讲都是值得推荐的。

       æŽ¨èæ‰€æœ‰çš„应用程序使用融合文件。

       ç›´æŽ¥ä»Žå•ç‹¬çš„源码文件中构建sqlite当然可以,但是并不推荐。对一些特殊的应用程序,可能需要修改构建程序去处理使用那些从网站上下载的预构建的源码文件不能完成的情况。对于这些情况,推荐构建和使用一个定制过的合并文件。换句话说,即使一个工程需要以单独的源码文件构建sqlite,仍然推荐使用一个融合后的源码文件作为一个中间步骤。

       ç¼–译命令行接口(CLI)

       æž„建命令行接口需要三个源码文件:

       sqlite3.c:Sqlite融合的源码文件

       sqlite3.h:匹配sqlite3.c以及定义sqlite的c语言接口的头文件

       shell.c:命令行接口程序本身。这个c源码文件包含一个main()的例程和每轮循环的用户输入的提示符并将输入传给sqlite数据库引擎用于处理。

       æ‰€æœ‰çš„上述源码的三个文件都被包含在下载页面的amalgamation tarball中。

       ä¸ºäº†æž„建CLI,简单的将这三个文件放置在相同的目录下然后一起编译他们。用MSVC:

       cl shell.c sqlite3.c -Fesqlite3.exe

       åœ¨unix系统上(或者在windows上用cygwin或者mingw+msys)典型的命令会有些像这样:

       gcc shell.c sqlite3.c -lpthread -ldl

       ä¸ºäº†SQLite线程安全,需要pthreads库。但是因为CLI是一个单线程的,我们可以指示SQLite构建一个非线程安全的库并因此护绿pthreads库:

       gcc -DSQLITE_THREADSAFE=0 shell.c sqlite3.c -ldl

       -ldl库是在支持动态装载时需要,例如sqlite3_load_extension() 接口和load_extension()

        SQL function。如果这些特性都不要求,那么我们也可以使用SQLITE_OMIT_LOAD_EXTENSION编译时间选项忽略他们。

       gcc -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION shell.c sqlite3.c

       æœ‰äººå¯èƒ½æƒ³è¦æä¾›å…¶ä»–的编译时间选项(compile-time options),例如SQLITE_ENABLE_FTS3去全文本搜索或者SQLITE_ENABLE_RTREE用于R*树搜索引擎扩展。而有人将正常指定一些编译优化开关。(预编译的CLI可以从选择sqlite网站上使用“-Os”下载下来)有无数种可能的变数在这里。

       å…³é”®ç‚¹åœ¨è¿™é‡Œï¼šæž„建CLI需要编译一起两个C语言文件。shell.c文件包含入口的定义和用户输入的loop,而sqlite融合文件sqlite3.c包含完整的sqlite库的实现。

       ç¼–译TCL接口

        sqlite的tcl接口是一个小的模块被添加到一般的融合文件中。结果是一个新的融合后的源码文件,称之为“tclsqlite3.c”。这个源码文件是生成一个可以使用TCL

       load命令去加载到一个标准的tclsh或者wish中,或者随着sqlite构建成功生成一个单独唯一的tclsh的共享库所需要的。一个tcl的融合的副本被包含在下载页的TEA

        tarball中作为一个文件。

       ä¸ºäº†ç”Ÿæˆä¸€ä¸ªlinux上的sqlite的TCL-loadable库,下面的命令需要满足:

       gcc -o libtclsqlite3.so -shared tclsqlite3.c -lpthread -ldl -ltcl

       ä¸å¹¸çš„是构建Mac OS X 和 Windows的共享库并不是如此简单。对于这些平台最好使用包含在TEA tarball中的configure脚本和makefile.

       ä¸ºäº†ç”Ÿæˆä¸€ä¸ªå•ç‹¬çš„tclsh,可以用于sqlite静态链接,使用如下的编译器调用:

       gcc -DTCLSH=1 tclsqlite3.c -ltcl -lpthread -ldl -lz -lm

       è¿™é‡Œçš„技巧是-DTCLSH=1选项。sqlite的TCL接口模块包含一个main的过程,用于初始化一个TCL解释器并在以-DTCLSH=1编译后进入到一个命令行loop。上述命令可以工作在Linux和Mac

        OS X,虽然有时可能需要依赖于平台调整库选项以及编译的TCL的哪一个版本。

       æž„建融合文件

       ä¸‹è½½é¡µæä¾›çš„sqlite融合文件的版本对大多数用户来说是足够的。然而,一些工程可能想要或者需要构建他们自己的融合文件。一个常见的构建一个定制的融合文件的理由是为了使用特定的compile-time options来定制sqlite库。回想sqlite融合文件中包含了许多C代码由辅助程序和脚本生成。许多的编译时间选项影响这一成圣代码而且必须在融合文件组装前提供给代码生成器。这一系列必须传给代码生成器的编译时间相关的选项会使得sqlite的发布版本各不相同,但是在写这边文章的时候,代码生成器需要知道的这组选项包括:

       SQLITE_ENABLE_UPDATE_DELETE_LIMIT

       SQLITE_OMIT_ALTERTABLE

       SQLITE_OMIT_ANALYZE

       SQLITE_OMIT_ATTACH

       SQLITE_OMIT_AUTOINCREMENT

       SQLITE_OMIT_CAST

       SQLITE_OMIT_COMPOUND_SELECT

       SQLITE_OMIT_EXPLAIN

       SQLITE_OMIT_FOREIGN_KEY

       SQLITE_OMIT_PRAGMA

       SQLITE_OMIT_REINDEX

       SQLITE_OMIT_SUBQUERY

       SQLITE_OMIT_TEMPDB

       SQLITE_OMIT_TRIGGER

       SQLITE_OMIT_VACUUM

       SQLITE_OMIT_VIEW

       SQLITE_OMIT_VIRTUALTABLE

       ä¸ºäº†æž„建一个定制的融合文件,先下载原始的独立源码文件到一个unix或者类unix开发平台。确定获取的原始源码文件不是“预编译过的源文件”。任何人都可以通过到下载页或者直接从configuration management system.获取完整的一套原始源码文件。

       å‡è®¾sqlite源码树被存在一个名为“sqlite”的目录下。计划构建一个平行目录下的名为“bld”的融合文件。首先通过运行sqlite源码树种的configure脚本运行或者通过制作一份源码树顶层的的makfile模板的一份,来构建一个合适的makefile.然后手动编辑这个Makfile去包含需要的编译时间相关的选项。最终运行:

       make sqlite3.c

       åœ¨windows上使用MSVC:

       nmake /f Makefile.msc sqlite3.c

       sqlite3.c的make

       target会自动构造一般的“sqlite3.c”合并的源码文件,以及它的头文件“sqlite3.h”,和包含TCL接口的融合源码文件“tclsqlite3.c”。之后,需要的文件可以被拷贝到文件目录下然后根据上述勾勒的过程编译。

       æž„建一个windows的动态链接库DLL

       ä¸ºäº†åœ¨windows构建一个sqlite的dll使用,首先获取对应的融合过的源码文件,sqlit3.c和sqlite.h。这些可以从SQLite website上下载或者和上述告知的一样去定制生成。

       ä½¿ç”¨å·¥ä½œç›®å½•ä¸‹çš„源码文件,一个dll可以在msvc中使用如下命令生成:

       cl sqlite3.c -link -dll -out:sqlite3.dll

       ä¸Šè¿°å‘½ä»¤éœ€è¦è¿è¡Œåœ¨msvc的MSVC Native Tools Command

       Prompt.如何你已经在机器上安装了msvc,你可能有多个版本的这种命令提示符,针对于x和x的自带构建的,或者交叉编译到ARM的。依赖要求的DLL去使用对应合适的命令提示符工具。

       å¦‚果使用MinGW编译器,命令是这样的:

       gcc -shared sqlite3.c -o sqlite3.dll

       æ³¨æ„MinGW只生成位的dll。另有一个分开的MinGW工程可以用来生成位的dll。可以推断其命令行语法是类似的。需要注意的是最近的MSVC的版本生成的DLLs可能不能工作到WinXP或者更早版本的windows上。因此为了最大限度的兼容你的生成的dll,推荐MinGW。一个好的经验法则是使用MinGW去生成位的dlls,使用msvc去生成位的dlls。

相关推荐
一周热点