自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 问答 (4)
  • 收藏
  • 关注

原创 electron源码保护

electron 安全防护 保护

2023-05-05 11:40:07 3492 6

原创 nodejs c++ 插件编译踩坑记

这里尤其是在electron里引用了c++插件时,需要注意这个问题,因为electron内集成的node,和官方的node版本其实是不完全一样的,除了上述NAPI_VERSION以外,还要注意abi的版本,因为这个限定了API调用的约定,如果不一致,那么即便你编译插件通过了,实际运行electron程序时,依然会报错。插件的作者(或者你),在开发时的本机环境,可能与使用者是不一样的,所以有时候下载的插件不能通过编译而报错,那么其中之一的检查项,就是检查插件的node api版本。当然可以,没什么问题。

2022-11-15 11:41:13 712

原创 asp.net core webapi + vue部署

asp.net core webapi + vue 部署

2022-10-26 12:10:54 1607 2

原创 三,查缺补漏

这篇文章,是本专栏的最后一篇,也没什么太多的需要讲述了,主要的就是大家自己开发中去摸索了。在这里,我把windows那里面讲的有问题的地方梳理一下,主要是针对工具这块。首先是CodeLLDBvadimcn.vscode-lldb插件,这个插件其实可以不用装,因为windows上开发面向windows的插件,用微软的编译器也可以,而那个C/C++ for Visual Studio Code已经集成了很多环境了。其次就是关于Prebuild tools 预构建工具,大家先看看index.js和pa

2022-05-23 20:12:34 248

原创 二,binding.gyp 配置文件粗解

我感觉谷歌的官方文档本身就不完善,导致我没办法详解,很多配置都是看别人写的慢慢摸索出来的。windows篇章里,我实现了一个海康node插件,linux版里,我同样实现了这个功能.{ "variables": {"module_path%": ""}, "targets": [ { "target_name": "hik_camera", "cflags!": ["-fno-exceptions"], ..

2022-05-23 19:30:03 2873 9

原创 linux so 文件的一些问题

对于共享库(so文件),linux编译时和运行时的搜索顺序,可不像windows,他有他自己的规则,需要在开发的时候注意,否则发布之后,就会出现找不到库文件的错误。在开始讲解这个问题的时候,我们先来看看两个linux命令:ldd这个命令,可以查看当前库或应用程序的依赖项readelf这个命令,可以读取ELF文件的一些相关信息以上2个命令,都是查看文件信息非常重要和好用的命令,大家需要掌握。好了,我们开始讲述本文的正题吧,先假设我们有一个main.c文件,一个libA.c文件,main.c会编译

2022-05-23 19:29:18 847

原创 一,搭建开发环境

1,系统这里,大家可以随意选一个自己喜欢的linux操作系统,可以是安装版的,也可以在虚拟机里整。之所以提到系统,主要是为了便于后面行文,因为不同的linux系统,有些细节方面还是不同的。我选的是ubuntu 16.04 LTS版,当然我在 20.04 上也测试通过了的。选低版本,是由于我自己还需要兼顾Qt开发,大家根据情况来吧。2,nodejs网上有很多教程教大家如何在linux 16.04里安装nodejs(不要用默认的 apt install方式,这个版本太低),大家随意。我用的方法就

2022-05-23 14:07:32 618

原创 CDHtmlDialog 拦截证书错误

最近碰到一个需求,要嵌入IE浏览器到应用程序中。在开发的过程中,碰到了需要加载HTTPS网站,而该网站的证书无效的问题。如果是直接用IE浏览器打开的话,虽然也会报错,但至少可以通过“转到此网页(不推荐)”继续访问,而CDHtmlDialog提供的嵌入式IE浏览器,则没有这个操作。当然,这是一个安全设置,正常来说不应该继续访问,要么提供有效的证书以继续访问。但是我的需求是加载一个已知的站点,需要能正常访问,那这个时候就需要拦截安全报警,忽略掉然后继续访问了。微软的官方文档翻了一遍,由于英格利希

2022-01-13 09:39:32 193

原创 c/c++ 与 lua 之搭建环境

这几天因项目需要,又把c/c++搬出来用了一遍(已经以.net为主了),用qt(也是现学滴)开发了一套应用程序管理框架,其中,涉及需要灵活更新对被管理的应用程序的控制的功能,思考了一下,应当找一套适合c/c++调用的脚本语言来完成,python、javascript等等我还会点点,后来发现lua也可以(我喜欢玩魔兽),好了,就它了,继续现学现用,嘿嘿。先撸完了语法,能够写几个lua脚本了,接下来就是如何嵌入c/c++程序中调用了。工欲善其事必先利其器,我撸lua的时候用的vscode,想着就用vsc

2021-12-11 12:07:55 1012

原创 ASP.NET CORE 利用 object 类型数据处理 json 格式的数据

通常来讲,EF只能持久化基础类型到数据库,例如bool,string,DateTime等等,当然也支持复杂类型,但是要配置一下。这两天遇到一个需求,需要保存动态类型到数据库,我首先想到的,就是把一个json字符串保存到数据库,然后在上下文环境中去解析。同时,为了能够应对数据在web中的传输,于是我把类型定义为了object。但这种类型不能被EF序列化,所以我们需要做一些额外的转换工作。其实思路也很简单,就是自定义序列化方法,这里我用到了newtonsoft json,从数据库读取或写入。首先我.

2021-10-15 16:20:10 1312

原创 托管C++随笔二:回调函数

在C++程序里,经常会碰到通过回调函数来返回数据的情况,那么在托管C++里如何实现回调函数呢?其实也不难,只要理解回调函数,不过是一个函数指针而已,就简单了。在托管代码里,是通过委托(delegate)来描述函数指针的,只不过这里需要注意.net的垃圾回收机制,要防止定义的委托被gc回收,否则回调函数一旦被回收或移动,那么委托指向的地址就是一个无效地址,此时C++代码里的回调调用就会失败,导致程序崩溃。1,在非托管代码里定义回调函数typedef void(__stdcall *pMyCa

2021-08-06 17:29:29 374

原创 托管C++随笔一:触发事件

我们在.net里写代码,会经常通过事件来处理程序流程,比如IO操作完成、失败或遇到一个特殊的数据等等,触发一个事件,然后做相应处理。那么我们在托管C++里如何实现触发事件呢?其步骤和.net里写一个事件的步骤差不多是一样的,分以下几步(我拿公司SIP通话的部分代码来讲解):一,定义一个委托你可以自定义一个委托,也可以直接使用.net框架为你预定义的专用于事件的委托,我这里自定义了一个委托。namespace AVWrapper{ public enum class SipEvent

2021-07-07 10:38:45 684 1

原创 远程到docker容器内调试 asp.net core

微软官网有关远程调试的文章写的已经很好了,大家可以直接看官方文档:附加到docker进程调试我这里只是记录了学习的过程,以及踩的一些坑,仅供参考环境本机安装了 visual studio 2019远程操作系统 ubuntu 16.04,安装了 docker 20.10.6正文附加到docker内调试asp.net core,既可以是本地的,也可以是远程的,我们先说远程的吧。有两种方式,通过 ssh ,或者 docker daemon,我只研究了常用的ssh方式,因为我之.

2021-06-28 09:50:19 1209

原创 通过ssh远程到docker内开发

今天开始学习ASP.NET MVC5,后台数据库采用MYSQL,

2021-06-19 11:22:14 275

原创 NuGet Package Explorer

现代Visual Studio下的开发,大家一定用过,或者听说过nuget,不知道的可以去面壁了。代码写多了,经验越来越丰富,但人越来越懒,是啊,谁愿意重复造轮子?谁又愿意陷入版本管理的地狱?所以有了很多包管理的工具或平台,但是这里我不是要讲这个nuget,而是自己搭建一个包管理平台,原因嘛,当然是因为不想开源嘛(其实是自己造的轮子很垃圾,只能自己玩玩)要搭建自己的包管理平台,方法很多,比如用 baget,或者Nexus,推荐用后者,因为人家那是专业的,而且除了搭建.net的包管理仓库,还可以搭建ja.

2021-05-08 12:02:31 1693

原创 三,调试环境

既然是C++插件,那其实还是开发C++程序啦,所以调试是必不可少的,这里我以VSCODE为IDE,介绍在它上面的调试环境怎么配置,首先安装一个VSCODE,(^_-)然后安装两个插件:C/C++ms-vscode.cpptools CodeLLDBvadimcn.vscode-lldb一个是智能提示,一个用于调试C/C++程序,更多具体的用法,大家度娘吧,我就不啰嗦了。1,配置c_cpp_properties.json,让智能提示智能起来,没什么特别的,应该都能看明白其含义{ .

2021-03-24 14:08:43 627 2

原创 九,善用工具

在前面的文章中,很多东西都是手撸的,比如那个binding.gyp,其实还是有工具可用,下面我将介绍两款工具,可以辅助我们开发一,generator-napi-module这是一个生成器,可以帮助我们快速搭建项目,具体用法如下:// 安装Yeomannpm install -g yo// 安装生成器npm install -g generator-napi-module// 创建一个项目目录,比如叫 hello,然后进入这个目录,运行yo命令生成工程yo napi-module/

2021-03-24 11:05:05 319

原创 八,查缺补漏

前面写的一些例子,还不是很好,比如海康SDK的初始化和注销,由于只需要全局执行一次,所以其实应该属于CKSHikCameraWrapper 类,作为类的方法而存在。具体怎么做,实际上如果仔细看例子的同学已经知道了,就是在CKSHikCameraWrapper 类的CreateNewItem 方法,我们参照这个写法,写两个类的静态方法就可以了:...

2021-03-23 17:06:01 214

原创 七,来点高级的

写hello world,对于新手来说很有必要,但是对于希望能玩点更高级的来说,感觉就差那么点意思了,所以我们来写一个海康摄像头抓拍的插件吧(其实眼尖的人,看到我之前建的项目名称,大致能想到了)这篇文章,会学到这么几个知识点:1,设置第三方头文件、静态库文件2,传参,javascript和c++代码之间如何相互传参3,返回值4,异常node-gyp rebuild --debug --arch=$arch注意以上命令,由于一些第三方c++ DLL,比如海康SDK,分x86.

2021-03-15 12:05:24 754

原创 六,bindings

1,初始化gypnode-gyp install此命令会初始化gyp的一些nodejs头文件,这些文件下载在当前windows用户的.node-gyp目录下2,生成项目文件node-gyp configure需要自行创建binding.gyp,这个文件用于描述nodejs的构建结构3,生成项目node-gyp build...

2021-03-12 11:54:20 756

原创 四,binding.gyp配置文件粗解

用#符号作为注释{ "targets": [ { # 链接目标,链接之后,生成 "greet.node" "target_name": "greet", "cflags!": [ "-fno-exceptions" ], "cflags_cc!": [ "-fno-exceptions" ], # C++源文件 "sources": [ "./src/greeting.cpp", ...

2021-03-12 11:53:50 1334

原创 五,hello world

本书开发,使用的是vscode为IDE。我们还是先按咱程序员通用的例子,hello world开始吧:一,创建项目先创建一个工程目录,在此目录下,安装c++ addon 开发包:npm install --save node-addon-api运行此命令后,会生成如下图所示的目录及内容其中,node_modules下的node_addon-api里的内容,就是开发插件需要用到的源代码和一些工具。接下来创建binding.gyp文件,用来描述这个工程{ "targets

2021-03-12 11:52:45 136

原创 二,nodejs 插件开发方式简介

1, NANnode.js 原生抽象帮助包 https://github.com/nodejs/nan,用于兼容各个nodejs版本,但是nodejs版本改了,依然要重新编译2, NAPINode.js 的所有底层数据结构全部黑盒化,抽象成 N-API 当中的接口,做到ABI化应用二进制接口( Application Binary Interface )。这使得在不同 Node.js 下,只要 ABI 的版本号一致,编译好的 C++ 扩展就可以直接使用,而不需要重新编译3, node-a

2021-03-12 10:17:41 675

原创 一,搭建开发环境

1,安装构建器 node-gypnpm install -g node-gyp2,设置NPM镜像,以解决npm下载太慢的问题NODEJS_ORG_MIRROR淘宝镜像:https://npm.taobao.org/mirrors/node3, 环境和编译器有两种方式搭建:3.1直接使用NPM构建使用npm 的 windows-build-tools,里面包含了visual c++ build tools 和 python 2.7npm install --global --pr.

2021-03-12 10:12:57 169

原创 指针常量与常量指针

指针常量就是“指向常值的指针”,其类容不能改变,但是指向的地址可以改变;常量指针就是“指向值的常指针”,其类容可以改变,但是指向的地址不能改变。1>const int *p;2>int const *p;3>int * const p;以上3中指针,1和2的写法不一样,但是作用一样,都是声明了一个指针常量,3为常量指针。int i = 1;int j = 2;对于1,2,举例如下:const int *p = &i;*p = 2; // 错误

2021-01-29 11:56:56 85

原创 函数前后的const

1,const int * Fun() 或者 int const * Fun();2,int *Fun() const 或者 int Fun() const;第一种,函数返回了一个常量指针,那么相应的,就必须定义一个常量指针来接收,否则编译就会报错。例: const int * i = Fun();那么这有什么好处呢?比如,函数返回的,是某个全局变量,或者是某个类的成员变量,不加上const, 那么一旦拿到了这个指针,就可以修改那个变量的值了,这可能不是你想要的。要注意的是,对于不是返回指针的,

2021-01-29 11:56:02 203

转载 LocalContainerEntityManagerFactoryBean VS EntityManagerFactory

BasicallyJPA specificationdefinestwo types of entity managers. They are :i) Application-Managed :Application Managed entity manager means "Entity Managers are created and managed by merely the app...

2019-12-03 10:50:45 703

原创 托管c++中的资源管理 ~ 和 !符号的作用

写过c++程序的朋友应该都知道析构函数的定义方法,举例如下:class CSomeClass{public: CSomeClass(); ~CSomeClass();private: LPCTSTR m_szBuffer;};带有~符号的,就是析构函数,一般来说,我们会在析构函数里做资源的释放和清理工作,在托管c++里,也是如此,不过如果仅仅在析构函数里做资源的释放,那么就必须要按照...

2018-02-11 14:19:35 416

原创 VS2015 ASP.NET MVC项目Razor智能提示失败的解决方案

解决方案如下:打开文件夹 Users\\AppData\Local\Microsoft\VisualStudio\删除文件夹 ComponentModelCache重启 Visual Studio.

2017-10-31 22:02:07 2079 1

原创 EF Code First遇到的坑

今天按平常一样,啪啪啪(解释一下,是敲代码的声音)几下就把项目数据库的基本环境搭好了,使用的MySQL EF,最后数据迁移时总是过不去,而且报的错还莫名其妙,整了好几个小时,可把我郁闷的。我在想,以前没碰到过这样的问题啊,到底是哪里出错了?最后在崩溃前夕,我把项目设为默认启动项,再运行,搞定!他喵的!这么热的天,我不由得爆发了吓死人不偿命的一声大吼,啊~~~~~~~~

2017-07-04 18:03:08 892

原创 实体模型中的virtual关键字

[Table("sys_user")] public class User { [Key] public Guid UserId { get; set; } public string UserName { get; set; } public string Passwords { get; set; }

2017-05-09 11:59:13 714

原创 Visual Studio 使用正则表达式查找替换

这几天在写DirectSound录音时,发现按照文档和查阅的资料写出的代码,在创建录音缓存时总是报无效的参数这个错误。我在想是不是因为音频格式未设置正确造成的,于是决定运行directx9的例子来看看究竟是什么情况。但编译时却发现,在win10下的dx9例子中有很多符号都未定义,例如DXTRACE_ERR_MSGBOX,而我又懒得修正这个错误,于是决定先注释掉它,反正我只想看看运行到创建录音缓

2016-11-19 10:44:12 4479

原创 .net自定义配置

在开发.net程序时,有可能会用到配置,如果全部写在appSettings节,感觉不那么专业,当然配置很少的情况,一般还是用appSettings。这里记录一下自定义节的声明: 这里引用了log4net的配置节声明,其中name表示节的名称,在下面写详细配置时,需要以这个名称为根节点;type,描述了当前节点对应的类型,也就是最终会用到哪个类来装载配置。typ

2016-10-27 14:58:19 353

原创 不用重建项目,就能添加ActiveX的代码文件

开发AcitveX控件时,会遇到很多麻烦的事,尤其是设计到控件代码修改后,需要在测试环境里重新加载时。微软现在版本的IDE,比如vs2010等等,对它的支持很不好,总是会出现控件加载不了,或者占用中,卸载不了的问题,当然,这些问题都还算好解决。以前碰到一个问题,就是在控件接口改变后,需要重新加载控件,然后生成新的代码文件,但是这个时候问题来了,你会发现把旧代码文件删除后,怎么加载,IDE都不会

2015-01-20 14:11:35 554

原创 c/c++读写xml 数据

c/c++读写xml 数据 xml数据格式是现在非常流行,也非常通用的一种数据格式,在很多地方都有应用,例如网页前台后台交互数据,就可以使用xml格式。但由于c/c++原生态不支持xml的操作,导致用c/c++语言来操作xml是一件非常复杂的事情,好在很多人也在研究这个事,所以在网上可以搜到很多c/c++操作xml数据的第三方库,下面,我就来介绍其中一款:Xerces-C++ XML

2015-01-12 14:59:13 11052 2

原创 C/C++中遍历枚举类型

通常在其他语言中,例如VB,JAVA等,都可以直接对枚举类型进行遍历,但是要在c/c++中直接遍历,就遇到问题了。那是不是C/C++中用不着遍历枚举类型呢?我个人觉得不是,因为既然其他语言中有遍历的方法,那肯定就有存在的理由,例如VB中可以使用一个函数轻轻松松拆分一个字符串,C/C++就不行,还得自己写,那好吧,那我们就自己写遍历枚举类型的方法。我选取CDialogEx里的一个枚举变量来做

2012-12-17 16:28:38 7988 2

原创 多字节与宽字节设置不同导致的DLL静态链接失败

今天把以前做的一个DLL文件用静态链接方式链接到程序里去,最后编译时总是提示“无法解析的外部符号”这个错误,我仔细检查了引入库的目录设置,lib文件的导入设置,却没发现任何问题。正在郁闷时,我想起了我的DLL文件是使用的Unicode 字符集,而应用程序用的是多字节字符集,于是尝试着将其也改为Unicode 字符集,然后编译,通过了。这个问题以前还从来没注意过,现在记下来以备以后忘记了再看看。

2012-04-03 14:51:05 745

转载 六种SOCKET模型(好文章必须要收藏)

一:select模型二:WSAAsyncSelect模型三:WSAEventSelect模型四:Overlapped I/O 事件通知模型五:Overlapped I/O 完成例程模型六:IOCP模型老陈有一个在外地工作的女儿,不能经常回来,老陈和她通

2011-10-15 09:26:36 904

转载 MFC的消息处理函数

MFC的消息处理函数1.AfxWndProc()       该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc2.AfxCallWndProc()   该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然

2011-10-13 17:24:15 680

原创 做事不要急躁

人一急躁,事就做不好,话也会说错,这可能跟性格有关,但也可能是天生的,我们只能在后天的学习、生活中去慢慢改变它。  今天我在写程序的时候碰到了一个怪事,明明在类的成员里声明了变量的,在调试过程中,编译器竟然告诉我这个变量是一个无法计算的表达式!后来我又在局部声明一个变量,结果

2010-08-24 11:18:00 2569

空空如也

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

TA关注的人

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