
开发问题
文章平均质量分 58
Yang.99
积小流以成江海。
展开
-
VS开发之如何获取实时的系统DPI
我很懵逼一查原来是DPI缩放问题,vs上设计的界面都是按100%缩放的,然后找了半天怎么获取电脑当前的DPI结果都不理想,最后在大佬的指点下也是解决了问题。函数获取监视器的DPI,剩下的就是用获取到的数据来判断设置的是多少倍缩放了,最后对界面进行调整即可。(DPI对应的缩放:96--100%, 120--125%, 144--150%, 168--175%,192--200%……,但是越测越不对劲,这个函数只能获取最初设置的DPI,一旦后期改变获取到的DPI还是之前设置的。原创 2023-07-07 11:23:44 · 595 阅读 · 1 评论 -
VS开发之堆栈 cookie 检测代码检测到基于堆栈的缓冲区溢出
我目前遇到的情况③,这个情况隐蔽性要稍微强一点,因为它在数据写入时并没有直接报错而是在其他操作时进行了报错(不知道是不是因为我在Release下调试的原因),从而一度让我找错了方向。后来将分配的内存扩大测试后问题成功解决。0x00007ffab3912dbd (delisyncbox.dll) (explorer.exe 中)处有未经处理的异常: 堆栈 cookie 检测代码检测到基于堆栈的缓冲区溢出。③数组分配的内存比实际写入数据所需的内存要小。原创 2023-07-07 10:48:26 · 4979 阅读 · 2 评论 -
VS开发之从文件资源管理器中选择文件
有时候我们需要从程序中访问到本地的文件项目,比如说一个简单的点名程序:需要从本地读取学生花名册。所以我们就选择常见的方法:弹出资源管理器,从中选择文件。返回值:PIDLIST_ABSOLUTE类型的数据,它是一个 PIDL,指定所选文件夹相对于命名空间根目录的位置,但也有可能返回的是快捷方式。:显示一个对话框,使用户可以选择一个 Shell 文件夹窗口。:公开用于初始化、显示和从通用文件对话框获取结果的方法。结构体类型的指针,该结构体包含用于显示对话框的信息。如果该方法要定义筛选器,比较复杂。原创 2024-10-15 16:40:50 · 410 阅读 · 0 评论 -
VS开发之Windows消息拦截
通常情况下,响应窗口消息只需要我们进行消息映射,就可以对不同消息进行处理。但是有时候我们期待在某个窗口上收到某个消息,但该窗口却收不到我们期待的消息。钩子的使用受到系统资源的限制,因为每个线程都有一个与之关联的钩子链表。子类化作用于特定的窗口实例,允许修改单个窗口的行为。超类化作用于整个窗口类,影响所有使用该类的窗口。它通过创建新的窗口类并注册来实现对消息的处理。超类化只能用于自定义的窗口类,不能用于系统预定义的窗口类,如按钮、编辑框等。可以设置不同类型的钩子,如键盘钩子、鼠标钩子等,以截获相应的消息。原创 2024-10-21 11:46:47 · 291 阅读 · 0 评论 -
VS开发之MSI未能注册模块 xxx.dll。HRESULT -2147024770。请与你的技术支持人员联系。
将输出文件属性中的自动注册vsdrfcomselfreg改为标准vsdrfcom再打包msi,安装完msi之后以管理员权限启动cmd.exe去安装的路径下,使用regsvr32 dll文件名手动注册。最近遇到一个让人头大的问题,在vs2022上使用Windows Installer打包的程序有个输出的dll需要注册com组件,在自己电脑上可以使用,但是给其他人使用就会报错 “如果是这种情况,那么大概率是缺少依赖项了, 启动vs自带的developer command prompt,输入指令。原创 2023-11-16 10:30:09 · 1641 阅读 · 1 评论 -
VS开发之MoveFile失败返回码为5
几轮排查之后发现是权限的问题,有些用户的安装路径在C:\Program Files\下,有的在其他盘,所以其他盘的可以更新,C:\Program Files\下的无法更新。因为在Windows系统里C盘是系统盘,普通用户只有读的权限没有修改和写入的权限,所以操作其文件或是文件夹需要管理员权限的,故MoveFile改名失败导致更新失败。以下的方法本质上是差不多的,都会单出来一个UAC窗口,需要用户确认才能获取管理员权限。1.手动为普通用户添加权限(测试或者自己用,那这个方法没问题,给用户当然是不行的)原创 2024-03-20 17:38:37 · 2250 阅读 · 1 评论 -
VS开发之Shell_NotifyIcon托盘显示气球通知无效
但是每当我需要在托盘上显示气球通知的时候都是无响应的。首先要使用Shell_NotifyIcon(NIM_MODIFY, &niData)显示气球通知时,其uFlags必须包括NIF_INFO,我是有的。然后我还检查了uVersion和cbSize,都没问题,在一台服务器上测试是可以显示的,但是在我win10的电脑上就是没有反应。总而言之,如果你在win10及以上的操作系统中使用Shell_NotifyIcon显示气球通知时,如果不起效果可以检查一下注册表中是否开启了气球通知。原创 2024-04-25 14:10:51 · 494 阅读 · 1 评论 -
vs开发之无法解析的外部符号、Debug正常调试Release找不到头文件
头大头大头大头大头大头大头大头大!先是报无法解析的外部符号,然后好不容易解决了但是切换Release模式引用外部库中的函数又找不到了,报未定义的标识符,但是我明明都添加了头文件路径和引用的库文件和路径!填的是 ”E:winclient\SyncBoxDll\Include\alibabacloud\oss“,而OssClient.h中这些报错的头文件实际上和OssClient.h是同级目录,但是在OssClient.h中引用时并不是同级,所以才会导致OssClient.h中引用的头文件找不到,导致报错!原创 2024-05-11 14:47:46 · 2004 阅读 · 1 评论 -
VS开发之LoadImage获取的位图句柄为空
网上搜索之后才知道,LoadImage是只能够加载bmp格式的图片,其他格式的图片是加载不了的(并不是指bmp后缀而是指bmp的存储格式,所以非bmp的图片直接改后缀可能还是加载不了)。②另存为bmp选择24位位图,保存完之后可以用这个新的图片去尝试一下,一般情况下都能行,不行那只能换方法。解决方法:1.从存储格式方面上更改图片的格式。①右击要修改格式的图片,选择编辑-》画图打开。原创 2024-07-03 18:35:21 · 380 阅读 · 0 评论 -
VS开发之打包的程序启动闪退
那么原因就在这了,Detected Dependencies文件夹下的dll是打包时系统自动生成的文件,而我们引用的dll文件是需要手动添加的,不在该文件夹下。但是因为该文件下已经有了安装程序所需要的dll,所以我们手动添加的就自动被排除了,于是安装程序运行时没有调用到我们手动添加的dll,最终造成了闪退的情况。我在覆盖后安装的程序能够运行了,说明是打包的依赖文件有问题。昨天在vs中使用微软提供的打包扩展打包程序遇到了一个问题:打包的安装包,安装后一启动就闪退!2.检查打包的程序是否缺少依赖。原创 2024-07-05 10:54:29 · 926 阅读 · 0 评论 -
VS开发之动态库和静态库冲突问题
再然后我上传代码到Gitlap上,于是就构建项目失败了,提示缺少动态库文件。但其实在编译时就已经把二维码库链接到项目文件中了,所以根本不需要添加动态库文件了。故移除安装包中的动态库文件,再次上传,构建就成功了。假如在项目中已经添加了依赖(静态的链接lib文件),那么项目的安装包中就无需再添加第三方库的动态库文件了,否则其他人在使用你的代码时,构建项目可能会出错。项目使用了生成二维码的第三方库,并且在项目中已经静态链接了第三方库的静态库文件。然后我又在安装包中添加了二维码的动态库,指定其运行时链接。原创 2024-10-08 16:16:53 · 357 阅读 · 0 评论 -
VS开发之遍历Vector容器报错
Swift中不同的字符可能会占用不同数量的内存空间,所以要知道字符的确定位置,就必须从字符串的开头遍历每一个 Unicode 标量直到结尾。此时该容器有五个元素,有时候我们需要访问最后一个元素,如果使用vec.end()方法对其进行遍历却没有关注它返回的迭代器是否合法,那么就会报错了“can't dereference out of range vector iterator”。vec.end()的迭代器是指向该容器的最后一个元素的后一位的,当你使用该迭代器去读取数据或者修改数据就相当于越界访问了。原创 2024-10-09 14:53:45 · 285 阅读 · 0 评论 -
VS开发之异步线程内存管理问题
该线程执行线程函数中的代码,直至遇到return就会结束,然后被系统自动清理,无需我们手动清理。但是在线程终止运行后,线程句柄对象仍然在系统中,所以必须释放它,通过。CloseHandel()只是关闭了一个线程句柄对象,表示我不需要再使用该句柄,但不干预线程如何执行,并没有结束线程的运行。先让我们了解一下该函数,该函数创建成功后会返回一个线程句柄,该线程句柄是用来控制该线程的,它属于。创建子线程进行异步操作时,需要考虑这个线程在什么时候才能释放,该怎么释放,否则会造成内存泄漏。原创 2024-10-14 18:54:12 · 269 阅读 · 0 评论 -
关于GitLap上传代码未同步问题
我就是因为项目的根目录忽略了Debug和Release目录(因为我非根目录创建者并不知情),导致死活上传都没有更新,原来这两个名称的目录已经被设置了忽略上传!2.可以在执行后使用命令检查。代码仓库的,可能会存在上传的文件夹/文件被忽略的情况!如果文件被忽略,命令会输出匹配的规则;如果文件未被忽略,命令不会有任何输出!提交时,会显示文件更改的信息,可以知道新增项是否已经成功提交。4)检查一个通配符匹配的文件列表。3)检查一个目录下的所有文件。原创 2024-10-09 14:17:47 · 501 阅读 · 0 评论