C/C++
爬行的菜鸟
学习才是正确的道路
展开
-
动态加载dll的问题(同一个进程使用dll的解决办法)
今天项目需要进行同一个dll的多线程同时操作。 解决办法 :通过动态加载的办法 将dll复制重命名 即 线程A-----复制test.dll并重命名为test_A.dll--动态加载test_A.dll 线程B-----复制test.dll并重命名为test_B.dll--动态加载test_B.dll//现在dll中的函数为DWORD WINAPI SUP300_Open(_Out_ HANDLE* hHandle, _In_ int ControlT...原创 2020-08-04 17:17:13 · 1462 阅读 · 0 评论 -
BMP图24位转换成1位单色
昨天在工作的时候又遇到了这个问题 所以在此记录一下 这是个纯c语言的 兼容性不错24位BMP转1位BMPFILE* SetRGBQUAD(FILE *wfile){ int i; RGBQUAD rgbquad[2]; for (i = 0; i<2; i++) { rgbquad[i].rgbBlue = i ? 0xFF : 0; rgbquad[i].rgbGreen = i ? 0xFF : 0; rgbquad[i].rgbRed = i ? 0xFF :...原创 2020-05-21 08:44:32 · 1637 阅读 · 0 评论 -
c++中如何只保留float型的小数点后两位
floatspd=22.518744;charbuf[10];sprintf(buf,"%.2f",spd);sscanf(buf,"%f",&spd);记录一下,有时候我们需要float类型只保留两个有效小数,但是在实际应用中会发现一些现象如:1.5 在实际中为1.49999998 等等还有一个常用的方法同时进行四舍五入:float ff = 3...原创 2019-04-24 15:02:59 · 25131 阅读 · 0 评论 -
C#调用C++字符集与类型对比
1.C++数据类型与C#对应关系2.C#中调试C++的DLL3.字符集常识最近项目,需要在C# 中调用C++ 写的DLL,因为C# 默认的编码方式是Unicode,而调用的DLL规定只处理UTF8编码格式的字符串,DLL中的输入参数类型char*被我Marshal成byte[],输出参数类型char**被我Marshal成了string(C++和C#之间的类型转换请参阅相关资料),于是...转载 2019-05-06 10:35:52 · 492 阅读 · 0 评论 -
C#调用C++的Dll(参数和返回值為char* TCHAR*)
想要在C#和C++之间进行字符串传递会涉及到两件事情:1.C#的string和C++的字符串首指针要怎么对应. 2.字符串分为ANSI和UNICODE.C++ 头文件接口://FilePolice.h //參數和返回值為Ansiextern "C" __declspec(dllexport) char* __stdcall EncryptString(char* i...转载 2019-05-06 10:38:25 · 1761 阅读 · 0 评论 -
(C++C#类型互转工具)使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明
在网上看到很多网友在.NET程序中调用Win32 API,或者调用自己的VC DLL里面提供的函数的时候,总是被生成正确的C函数在C#中的正确声明而困扰,而生成C++中结构体在C#中的声明 - 天,没有什么比这个更让人恶心的事情了。因为:1.如果你的结构体里面包含 TCHAR字符串成员的话,需要考虑ANSI和Unicode DLL的情形。2.如果你的结构...转载 2019-05-10 08:19:59 · 2294 阅读 · 0 评论 -
INVALID_HANDLE_VALUE 、 NULL和nullptr的联系
一、INVALID_HANDLE_VALUE1、源码// WinNT.htypedef void *HANDLE;// BaseTsd.htypedef _W64 long LONG_PTR, *PLONG_PTR;// WinBase.h#define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1)2、解析...转载 2019-06-24 09:07:22 · 1017 阅读 · 0 评论 -
error C2275: ‘XXX’ : illegal use of this type as an expression 报错的解决方法!
当你命名你的源文件时*.c,MSVC假定它正在编译C,这意味着C89。所有块本地变量都需要在块的开头声明。解决方法包括:在代码块的开始部分声明/初始化所有局部变量(紧接在大括号之后{) 将源文件重命名为*.cpp或等效并编译为C ++。 升级到VS 2013,放宽这个限制。示例:下面程序会报错//最简单的创建多线程实例#include<stdio.h>...原创 2019-09-18 09:13:08 · 3658 阅读 · 0 评论