VC++ .NET
cp1300
电子爱好者
展开
-
windows recvfrom错误10014
fromlen 的参数有Inout标记,意味着会传入一个值,然后再返回一个值,之前一直没有给赋初值,增加初值后就正常了。就是告诉函数这个ClientAddr大小。原创 2024-10-12 11:24:59 · 259 阅读 · 0 评论 -
未能找到任何适合于指定的区域性或非特定区域性的资源
未能找到任何适合于指定的区域性或非特定区域性的资源。请确保在编译时已将“WindowsFormsDemo.UnifiedConfigListControl.resources”正确嵌入或链接到程序集“设备配置助手”,或者确保所有需要的附属程序集都可加载并已进行了完全签名原创 2023-03-15 11:29:09 · 1320 阅读 · 1 评论 -
vs2019 error LNK2038: 检测到“RuntimeLibrary”的不匹配项
使用vs2019开发时,遇到error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(main.obj 中)是添加lib时动态与静态方式冲突导致,按照网上设置这个设置的没有用,而且默认值修改后会报错我的解决办法如下:删掉:#include <iostream> 头文件引用即可;...原创 2022-03-20 15:35:34 · 1674 阅读 · 1 评论 -
visual studio installer 2019 无法下载或下载慢问题记录
1.下载链接:下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux翻到页面最下面https://my.visualstudio.com/Downloads?q=visual%20studio%202019&wt.mc_id=o~msft~vscom~older-downloads目前是上面这个地址,可能后面还会变动自己选择要下载的版本进行下载;2.开始下载这个时候你会遇到下载速度为0,根本没法开始,此时实测解决办法是讲...原创 2021-12-21 14:22:15 · 1584 阅读 · 2 评论 -
VC++ winform遍历所有控件
遍历所有控件,需要使用递归调用,将所有的控件都找出来,我这里使用的是递归调用,寻找指定的控件,设置相关属性,例子如下://循环遍历设置控件为只读void GetControlSetReadOnly(Control^ mControl, bool isReadOnly){ System::Type^ mType; if (mControl != nullptr && mControl->Controls != nullptr) { for each (Contr原创 2021-09-01 16:33:26 · 604 阅读 · 0 评论 -
windows虚拟ILI9341 TFT LCD
使用的是windows虚拟LCD屏幕,底层使用d3d9实现,以及dxgui,通过实现与ILI9341相关接口,达到兼容单片机上面操作LCD底层,便于调试UI;/************************************************************************************************************* * 文件名 : TFT_ILI9341.c * 功能 : 虚拟ILI9341控制器的TFT 驱动 * 作者原创 2021-08-20 09:44:43 · 700 阅读 · 0 评论 -
win32 运行ucosii移植lwip2.1.2问题记录
由于windows上面移植的ucosii的线程跟单片机线程完全不一样,ucosii上面的线程使用的是windows线程,并且任务之间调度靠的是信号量,将不需要运行的线程挂起,需要运行的线程唤醒,而且设计到ucos ii之外的线程很多,比如我用来做串口数据查询的线程,虚拟网口接收数据的线程,这个时候就会产生一个问题,那就是关闭中断问题,关闭中断进行临界保护,这个时候就很难了,由于本身都是独立线程,我尝试了很多办法,最后都没有成功,起初我是在虚拟网卡回调中直接将接收的数据写入lwip。//网口数据接收回调原创 2021-08-20 09:05:38 · 596 阅读 · 0 评论 -
win32 timeSetEvent 使用记录(win32移植ucos ii)
在win32上面使用网上提供的ucos移植代码,使用过程中经常会出现要么无法启动,要么会在0-5小时内假死(ucos ii的线程都在等待,任务调度停止),而且中间不会报错,先来看看这个win32上面移植ucos的原理;win32上面移植ucos ii是靠的1个timeSetEvent多媒体定时器(貌似是精度最高的了),加上一个任务调度线程,首先初始化一个timeSetEvent定时器,一个OSTickEventHandle事件,一个OSTickW32 win32线程,这3个组成了单片机里面的定时器中断(原创 2021-08-16 08:43:34 · 691 阅读 · 1 评论 -
FTP上传调试记录,主动模式与被动模式
FTP分为主动模式与被动模式,在VC++ CLR中的FtpWebRequest UsePassive进行设置,默认是true也就是被动模式,设置为false则为主动模式。reqFTP->UsePassive = false; //选择主动还是被动模式-主动模式。主动模式与被动模式区别,比如现在告诉你用8080端口作为FTP:主动模式下:客户端使用8080作为命令连接,发送一些命令到服务器,同时发送一个 PORT 192,168,1,240 63,75给服务器,告诉服务器,我的IP是...原创 2020-09-12 15:44:56 · 916 阅读 · 1 评论 -
VC++ FTP创建目录并上传文件
首先判断FTP服务器中是否存在相应的目录,如果存在,则上传文件,如果不存在,则先创建目录,并上传文件。//FTP操作相关#pragma once#include "SystemLog.h"#include "RealTimer.h"using namespace System;using namespace System::Net;using namespace System::IO;using namespace System::Globalization;using namesp原创 2020-09-08 08:28:11 · 878 阅读 · 0 评论 -
ARGB Alpha像素混合(透明图片叠加像素计算)
alpha混合计算方法很多,我这个使用的是最常用的计算方法.//ARGB 格式数据定义typedef struct{ u8 mB; u8 mG; u8 mR; u8 mA;}ARGB_DATA_TYPE;//进行2个像素混合,必须是ARGB888格式void ARGB8888_PixelMixing(ARGB_DATA_TYPE* pInB...原创 2020-03-14 09:03:15 · 2489 阅读 · 0 评论 -
STM32F7 DAM2D alpha像素混合(同时有对应的软件Alpha像素混合代码)
alpha像素混合可以在一个图层上面显示另外一张带透明的图片,以上一篇文章中的ICO图标解析为例.//ICO解码所需的填充接口-会执行像素混合void ICO_FillPoint_CallBack(GRAM_HANDLE* pHandle, u16 OffsetX, u16 OffsetY, void* pSourceImage, u16 SourceWidth, u16 SourceH...原创 2020-03-14 08:46:13 · 689 阅读 · 0 评论 -
WIN32虚拟STM32F7 LCD屏幕(WIN32虚拟单片机)
//虚拟STM32F7 的LTDC,使用dx3d实现显存操作,软件实现透明图层叠加/************************************************************************************************************* * 文件名 : stm32f7_ltdc.c * 功能 : 虚拟STM32F7...原创 2020-03-09 11:33:36 · 1138 阅读 · 0 评论 -
win32移植FATFS,使用windows API读取磁盘镜像文件
首先使用DiskGenius 建立一个.img格式的磁盘映像文件,我虚拟了一个256MB的SD卡,如下并格式化为FAT32文件系统,可以使用DiskGenius打开并拷贝数据。使用windows API实现底层虚拟SD卡的读写操作。//代码如下/*--------------------------------------------------------------...原创 2020-03-03 17:31:16 · 1206 阅读 · 1 评论 -
VC++ 获取系统服务列表
首先需要添加引用using namespace System::Management;并且在vs中引用System.Managemen.dll测试发现270个服务获取还是有点慢,不知道是否还有优化的余地。//一个服务的基本信息ref class OneServerInfo{public: String ^Name; //服务名称 String ^DisplayName...原创 2020-01-19 14:37:06 · 599 阅读 · 0 评论 -
VC++ CLR获取对象的句柄(指针)
.CLR对象是没法直接存储到数组中,我在实际使用中,需要将对象存储到FIFO中,以供异步线程访问,虽然可以使用队列,但是效率比较低,而且内存占用不可控,一直都是用C++写的环形FIFO作为异步通信,目前的使用场景是,1个线程从mongodb读取数据,分配到10个异步线程去存储,之前做法是将读取到的BsonDocument进行序列化,转换为bson字符串,写入到FIFO中,但是这样做需要使用很大的F...原创 2019-11-21 16:47:58 · 931 阅读 · 0 评论 -
HP Socket HttpServer使用
使用HP搭建Socket HttpServer,并且实现post,get,以及websocket,主要是webssockt折腾了不少时间。首先要自己实现底层接口,都是纯虚函数,需要自己去实现,继承自IHttpServerListener#pragma once#include "SocketInterface.h"#include "stdio.h"#include<sys...原创 2018-12-24 21:09:41 · 8334 阅读 · 1 评论 -
VC中GetLastError() 错误代码的含义
VC中GetLastError() 错误代码的含义 各种错误代码的含义 〖0〗-操作成功完成。 〖1〗-功能错误。 〖2〗-系统找不到指定的文件。 〖3〗-系统找不到指定的路径。 〖4〗-系统无法打开文件。 〖5〗-拒绝访问。 〖6〗-句柄无效。 〖7〗-存储控制块被损坏。 〖8〗-存储空间不...转载 2019-02-15 17:12:48 · 3520 阅读 · 0 评论 -
VC++ 用于调试的printf显示控件
习惯了单片机上面的C语言,使用printf进行输出调试,上位机虽然可以使用日志进行调试,但是很多时候做通信,需要实时显示16进制HEX编码,很不方便,因此自己写了一个使用richTextBox显示的自定义控件,用于刷新格式化的数据到界面,这个地方千万不用使用textBox,会非常卡的,长时间运行各种不稳定,基本的原理就是自定义一个printf函数,将格式化的字符串写入到FIFO中,使用一个异步线程原创 2018-01-11 13:43:15 · 1369 阅读 · 0 评论 -
VC++调用并编译静态库
新建一个win32 静态库//C或cpp#include "stdafx.h"#include "lib.h" int PASCAL FAR LIB_ADD(int n){ return (n+=1);}//h头文件#ifndef _LIB_#define _LIB_#if _MSC_VER > 1000#pragma once#endif原创 2015-12-22 11:22:47 · 3989 阅读 · 0 评论 -
VC++ CLR使用JSON与对象互转
可以将一个对象与json进行互相转换,需要Newtonsoft.Json.dll支持。//UserJson.cpp#include "StdAfx.h"#include "UserJson.h"#define NAME_SPACE UserJson// 从一个对象信息生成Json串 String^ NAME_SPACE::ObjectToJson(Object...原创 2018-11-27 08:40:01 · 742 阅读 · 4 评论 -
VC++ 未能找到任何适合于指定的区域性或非特定区域性的资源。请确保在编译时已将“xxxxxxx.resources”正确嵌入或链接到程序集“xxxxxxxxxx”,或者确保所有需要的附属程序集都可加
我是只要在DLL文件中添加图片,就会导致异常。问题表现为只要在DLL文件中添加了图片,被调用时会出现无法访问资源。其他信息: 未能找到任何适合于指定的区域性或非特定区域性的资源。请确保在编译时已将“xxxxxxx.resources”正确嵌入或链接到程序集“xxxxxxxxxx”,或者确保所有需要的附属程序集都可加载并已进行了完全签名网上有很多类似的问题,但是我都试过不是此问题造成的,我的这个出...原创 2018-06-12 11:27:13 · 2174 阅读 · 0 评论 -
一个自定义的自报报文格式(用于传感器自报上传数据)
本报文格式不能处理粘包问题,因为处理粘包问题的成本太高,会极大的降低服务端的处理效率以及增加内存消耗,如果传输速度很高,建议使用UDP,UDP传输速度快,并且应用层做响应,增加重传机制可以有效的保证数据的可靠性,目前我做的RTU升级等功能都是使用UDP完成,服务器端开销小,并且不会粘包。通讯建议:不要做什么握手机制,直接发送数据,服务器收到了就响应,收到响应后就结束通讯,握手增加耗电又增加流量消耗...原创 2018-05-15 14:20:18 · 3899 阅读 · 4 评论 -
关于MySql登录出现错误代码 1045 Access denied for user 'root'@'localhost' (using password:YES)
最近服务器上面mysql登录一直出现问题,错误代码 1045Access denied for user 'root'@'localhost' (using password:YES)在cmd模式下登录一直正常,修改密码也试过了,修改成功后,但是并没有效果,最终问题跟网上所有遇到的问题都不一样,我的是因为开启了2个mysql服务导致的,一个服务为mysql57 另一个为mysqla,我原创 2016-09-26 13:54:41 · 5920 阅读 · 3 评论 -
SQLServer数据库:获取列标题(字段名)
写数据库之前最好先查看数据库字段名是否存在,否则很容易出现写数据库失败。SqlConnection ^SqlServer_con; //SqlServer Form1(void) { InitializeComponent(); // //TODO: 在此处添加构造函数代码 // this->SqlServer_con = gcne原创 2016-05-16 14:47:49 · 3939 阅读 · 0 评论 -
socket INADDR_ANY导致端口可以重复打开
最近使用TCP server时,发现如果监控INADDR_ANY地址也就是0.0.0.0后,如果使用本机ip再去监控同样的端口,一样可以监控成功。比如我的本机地址为10.254.1.100,我监控0.0.0.0 1200端口 ,再启动一个服务器10.254.1.100 1200端口,数据都会到10.254.1.100 1200这里去,如果关闭掉10.254.1.100 1200,则数据会到0原创 2016-02-03 22:19:25 · 2019 阅读 · 0 评论 -
vs form设计器空白
经常遇到好不容易调好的界面出现了空白,并且出现的原因都不一样,表现为界面设计器变成了一个小框框,如下图所示:通常可以重新建立工程解决,但是这样会很麻烦,最终找到问题原因是private: Void InitializeComponent()导致,只要将private: Void InitializeComponent()放在构造函数之后即可解决这个问题,前提是你的工程没有问题,就是可以原创 2016-02-02 16:43:43 · 2587 阅读 · 0 评论 -
.net窗体关闭并没有回收内存
当新打开的窗体关闭后,GC并没有立即回收关闭的窗体内存,需要手动关闭窗体才能回收内存,否则每次打开内存都会不断增加,关闭窗体时析构函数并没有执行.pConfigForms->ShowDialog(); //打开窗体 pConfigForms->Close(); //关闭界面打开窗体后一定要手动关闭才能立即执行析构函数原创 2015-10-11 12:38:08 · 917 阅读 · 0 评论 -
VC++ .NET 动态加载DLL,使用反射方式Invoke委托调用
每次新产品都需要配一个上位机,并且本地配置与远程配置都需要重新开放配置程序,因此就想办法把配置模块变为一个动态的控件,一次开发后续2个程序都可以同时使用,使用了很多种方法,最后还是使用反射方式.1.DLL首先新建一个窗体控件将需要的界面从源程序拷贝过来原创 2015-10-09 21:50:44 · 1895 阅读 · 0 评论 -
VC++ .NET UI同步(使用Invoke托管方法),异步线程调用UI
花了好几天才学会,之前的代码都是C#的,无法直接使用.1.首先定义并声明托管delegate void testUI1(String ^ptr); //定义一个UI托管 delegate void testUI2(String ^ptr); //定义一个UI托管 testUI1^ myUI1; testUI2^ myUI2;2.在构造函数中实例化托管对象myUI原创 2015-01-28 22:04:23 · 1895 阅读 · 0 评论 -
VC++ .net 串口操作(简单的上位机串口操作)
因为我一直使用的是嵌入式芯片,比较擅长C,一直想写点j原创 2014-10-29 20:21:10 · 6084 阅读 · 0 评论 -
在托管VC++中使用函数指针进行回调(实现回调函数功能)
最近经常写一些通信协议,因为底层收发不一样,使用起来不方便,如果能直接像C中使用回调函数就非常方便了,比如用串口发送,则初始化时传入串口发送的回调函数,用TCP的时候就使用TCP的回调函数,但是因为涉及到托管于非托管代码的指针,使用起来还是有点麻烦,简单来说就是讲托管函数使用委托,然后将委托的指针找到,转换为C++指针,然后就可以访问了。添加命名空间using namespace Syst原创 2016-11-03 17:31:30 · 2350 阅读 · 0 评论 -
VC++ 出现Debug Assertion Failed!
最近编写了一个升级设备的控件,可以集成到不同的配置程序中,但是每次关闭工程或者关闭编辑页面的时候就会出现这个错误,但是编译和运行时没有任何问题,仅仅在关闭编辑窗体页面的时候会出现。添加的控件关闭编辑就会出现这个错误控件代码编辑界面通过多次的调试发现,只要把控件代码的析构函数删除掉就会解决这个问题 protected: ///原创 2016-11-22 13:23:07 · 25895 阅读 · 0 评论 -
任意多边形面积计算(用于任意水位的非规则河道截面积计算)
之前尝试过很多的任意多边形截面积计算,都有不同的局限性,直到使用了这个公式后,问题就解决了,感谢原作者的分享。//堰槽坐标定义typedef struct { double x; double y;}WeirCoorType;//任意多边形面积计算double CLASS_NAME::PolygonAreaCalculation(WeirCoorType *pWeirCoor, WO...原创 2018-05-15 08:36:23 · 4171 阅读 · 8 评论 -
VC++ CLR 串口读写上位机例程
使用VC++ .net4.0编写的串口读写上位机,实现基本的配置读取,写入,以及连续的实时数据读取显示,波形显示(采用异步操作,连续读取实时数据的过程中,可以读写配置)。1.总体界面功能:系统串口选择,串口连接,通信地址设置,采集周期设置功能,读取配置,写入配置。功能:实时数据读取并显示,同步显示波形数据。2.串口获取在 toolStripComboBox1 控件的 DropDown事件中,获取系...原创 2018-05-06 13:08:43 · 2376 阅读 · 0 评论 -
VC++ 发送邮件(使用邮件进行程序异常报告)
由于最近数据解析软件接入的设备很多,程序一旦发生异常如果没有及时恢复,可能会造成数据丢失,比如软件崩溃,数据库卡死无法写入数据,等等因素,会造成软件工作不正常,因此增加了一个邮件提醒功能(邮件提醒最简单),某些邮箱绑定了手机或微信,可以同步实时进行提醒,比如我用的139邮箱,或者QQ邮箱,会直接在微信,短信上面提醒,实时性还是比较高。//邮件发送类-写成了全局类#include "StdA原创 2018-01-20 14:31:00 · 1578 阅读 · 0 评论 -
VC++ CLR DataGridView 虚拟模式卡CPU问题
最近开发了一个数据解析程序,需要显示10W+的设备数据,采用了DataGridView 虚拟模式,效率非常高,但是使用中也遇到了一个奇葩的问题,微软MSN上面好像没有说到这个情况,比如我有10多列,界面默认只能显示前面计列,只要你把滑动条向右拖动了,也就是最前面不是第0列时,就会出现CPU占用非常大情况,同时会出现MessageBox无法弹出等情况。正常情况如上图所示,CPU占用非常低原创 2018-01-08 17:06:03 · 362 阅读 · 0 评论 -
tChart X轴时间显示以及Y轴自动范围
使用tChart有一段时间了,一直想用X轴显示时间,查了很多资料才实现,下面是具体步骤。//初始化设置//设置X轴为时间坐标 this->tChart1->Dock = DockStyle::Fill; this->tChart1->Aspect->View3D = false; //取消3D this->tChart1->Axes->Left->A原创 2017-04-26 14:44:59 · 7734 阅读 · 2 评论 -
VC++获取串口设备信息,CPU ID,硬盘ID,网卡MAC等机器硬件信息,用于加密
VC++获取串口设备信息,CPU ID,硬盘ID,网卡MAC等机器硬件信息,用于加密可以获取串口设备的详细信息,CPU ID,网卡MAC地址,硬盘的ID信息,以及系统安装时间,可以用来做计算机的唯一标识符。首先要添加 System.Management 的引用//详细的获取硬件信息的代码 //获取串口设备信息 public: int GetComHardwareInfo(arr原创 2017-03-15 14:46:37 · 6908 阅读 · 1 评论 -
VC++自定义加载DLL,从任意位置加载依赖的DLL
一直使用第三方控件,编译后依赖的控件都在运行目录,或者system32目录,看的很别扭,寻找过很多方法重定义加载,发现太复杂,最后无意间使用反射时发现,同一个DLL放在不同的地方只会被加载一次,因为每个dll都有一个唯一的KEY,利用这个方法,人为的加载这些DLL,可以从任意位置加载,可以解决程序运行目录下一堆DLL文件的问题。//初始化加载一些用到的DLL文件 try {原创 2016-12-01 13:39:21 · 3134 阅读 · 1 评论