c# MetroForm 和 IntPtr unsafe

news2024/9/27 7:17:08

一、NuGet安装框架

修改代码

效果:

 

结果:

 TopLevel与TopMost属性

            frm.TopLevel = false;  //Form.TopLevel 获取或设置一个值,该值指示是否将窗体显示为顶级窗口。
            frm.TopMost = false;  //Form.TopMost 获取或设置一个值,指示该窗体是否应显示为最顶层窗体。  TopMost是级别更高的属性

二、Marshal

三、IntPtr

C#【高级篇】 IntPtr是什么?怎么用?-CSDN博客

intPtr类是intPointer的缩写。C#中用来取代指针,也可以说对指针进行封装。指向非托管内存。它也不常用,因为C#项目中指针都被弃用了,那指针的封装——句柄,自然也被弃用了

IntPtr类型对多线程操作是安    IntPtr其实就是 HANDLE,无类型的指针。无类型的指针不能直接使用,需要传给接受它的函数。

IntPtr a = new IntPtr(2121);

int类型与IntPtr类型之间的转换

 int _value1 = 10;
 int _value2 = 20;
 //  AllocHGlobal 通过使用指定的字节数从进程的非托管中分配内存
 IntPtr _ptr1 = Marshal.AllocHGlobal(sizeof(int));
 IntPtr _ptr2= Marshal.AllocHGlobal(sizeof(int));
 // 将32位有符号整数写入非托管内存
 Marshal.WriteInt32(_ptr1, _value1);
 Marshal.WriteInt32(_ptr2, _value2);


 int  _nv1=Marshal.ReadInt32(_ptr1);
 int _nv2=Marshal.ReadInt32(_ptr2);

 Marshal.FreeHGlobal(_ptr1);   // 释放非托管内存中
 Marshal.FreeHGlobal(_ptr2);
 Console.WriteLine();

string类型与IntPtr之间的转换

            string _str = "aa";
            IntPtr _strPtr = Marshal.StringToHGlobalAnsi(_str);
            //  将非托管ANSI 字符串复制托管
            string _s = Marshal.PtrToStringAnsi(_strPtr);
            Marshal.FreeHGlobal(_strPtr);

结构体与IntPtr之间的转换



            // 结构体

            stuInfo _stu = new stuInfo()
            {
                _name = "sam",
                _gender = "male",
                _age = 23,
                _hight=34,
            };


            // 拿到大小
            int  _size=Marshal.SizeOf(_stu);
            IntPtr _p1=Marshal.AllocHGlobal(_size);

            // 这一步很重要
            Marshal.StructureToPtr(_stu,_p1,true);
            stuInfo _stu2 = (stuInfo)Marshal.PtrToStructure(_p1,typeof(stuInfo));


            Console.WriteLine(_stu2._name);
            Console.WriteLine(_stu2._gender);
            Console.WriteLine(_stu2._age);
            Console.WriteLine(_stu2._hight);

 获得数组的指针

            int[] _ary = new int[] { 1, 2, 3 };

            IntPtr inp = Marshal.UnsafeAddrOfPinnedArrayElement(_ary, 0);
            IntPtr inp1 = Marshal.UnsafeAddrOfPinnedArrayElement(_ary, 1);
            IntPtr inp2 = Marshal.UnsafeAddrOfPinnedArrayElement(_ary, 2);

            //内存地址以字节为单位,第一个元素地址为:n,第二个为:n+数据类型的字节数。int32是4个字节,那么元素相邻址之间差4
            //每次运行结果的内存地址都不一样!!!但地址却都相差4【系统随机分配内存】
            Console.WriteLine(inp.ToString());//输出的就是一串数字,就是内存地址。输出结果:n
            Console.WriteLine(inp1.ToString());//输出的就是一串数字,就是内存地址。输出结果:n+4
            Console.WriteLine(inp2.ToString());//输出的就是一串数字,就是内存地址。输出结果:n+8

获取某个变量的指针

unsafe

这里就要用到C#中的指针,用unsafe {}关键字,并设置:项目属性——>生成——>勾选“允许不安全代码”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1975528.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式人工智能(43-基于树莓派4B的刷卡模块射频识别RFID-RC522)

1、RFID 射频识别(RFID,Radio Frequency Identification)是一种无线通信技术,用于自动识别和追踪标签上的信息。这项技术基于射频信号的传输和接收,通过将标签上的数据存储在特定的芯片中,实现物体的识别和…

上市公司绿色信息披露质量评分数据(2008-2023年)

数据来源:基础数据来源于上市公司年报/社会责任报告/环境报告以及ZJ会及统计局 时间跨度:2008-2023年 数据范围:企业及行业层面 数据指标: 按照是否货币化分类企业对于环境信息的披露:对于货币化的信息,定量和定性…

共襄恰青赛马节盛事 共享农业产业园成果

恰青赛马节是那曲一年一度的草原盛事,是藏北规模盛大的传统节日,承载着那曲悠久的文化底蕴,体现了藏北各族群众丰富的传统习俗,更是深受民众欢迎。今年的赛马节上,色尼区国家现代农业产业园紧抓机遇,设置农…

Android设备发送蓝牙文件到电脑笔记本失败解决

Android设备发送蓝牙文件到电脑笔记本失败解决 文章目录 Android设备发送蓝牙文件到电脑笔记本失败解决一、前言二、解决1、比较旧的电脑2、大部分新的电脑 三、其他1、发送蓝牙文件到Window电脑端小结2、可传输的蓝牙文件的文件类型 一、前言 普通手机之间蓝牙配对后&#xf…

软件测试开发

软件测试的职业发展 起点:功能测试 走管理 业务专家行业业务专家行业业务发展专家 走技术 测试开发资深测试开发测试架构师/全栈测试工程师 软件开发模型 瀑布模型 V模型和W模型 W模型和V模型都把软件的开发视为需求,设计,编码&#x…

SolarMarker 正在使用水坑攻击与伪造的 Chrome 浏览器更新进行攻击

在过去的三个月里,eSentire 的安全研究团队发现信息窃密恶意软件 SolarMarker 都没有发动攻击,却在最近忽然重返舞台。此前,SolarMarker 的运营者使用 SEO 投毒或者垃圾邮件来引诱受害者,受害者试图下载一些文档的免费模板&#x…

非对称加密:数据安全的双重保障

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

每日OJ_牛客HJ73 计算日期到天数转换

目录 牛客HJ73 计算日期到天数转换 解析代码 牛客HJ73 计算日期到天数转换 计算日期到天数转换_牛客题霸_牛客网 解析代码 用一个数组存放每月的累积天数输入的日期天数 当月的天数 当月之前的累积天数,如果包含二月,再去判断是否为闰年,…

听专家的,不如听国家的,网络安全究竟值不值得报?

考学选专业,或者跳槽选行业的,看这篇! 如果你什么都不懂,家里也没有矿,那就紧跟国家大事和地方政策。 关于网络安全专业究竟是否值得报考? 要知道“二十大”、“十四五”等大会一直在提一个词叫做“数字中国建设”…

精通推荐算法19:特征交叉之DeepFM -- 异构模型Wide侧引入FM

1 引言 Wide & Deep的提出,使推荐模型同时具备记忆和泛化能力。通过融合低阶和高阶特征交叉,开启了推荐算法异构模型的风潮。后续越来越多的模型,在其基础上进一步优化,并取得了不错的效果。DeepFM就是其中一个很经典的模型&…

渗透测试--钓鱼网站实验

实验原理 使用工具 setoo1kit,构造钓鱼网站,钓鱼网站可以选择为比较知名的网站,例如学信网。被攻击者访问了钓鱼网站,输入自己的真实账号密码进行登录,账号密码会被 kali 收集 实验步骤 打开 kali 终端,输…

PyCharm中安装和使用FittenCode的AI插件助手

AI 逐步进入生活的方方面面,在编程开发中也不例外,下面简单记录一下 PyCharm IDE中安装和使用FittenCode插件AI助手的过程; 1,假设本地已经安装 PyCharm IDE, 如果还没有安装到如下地址进行下载2024年社区版: Thank …

短视频平台引流玩法

今天盘点了4大视频类的主流平台的精准引流触点,拿去用吧!

Qt pdf文件转换操作

qt文件转换操作&#xff0c;包括word转为pdf&#xff1b;Excel转为pdf&#xff1b;PPT转为pdf&#xff1b;image转为pdf&#xff1b;pdf转为文本文件&#xff1b;pdf导出图片&#xff1b;接口如下所示&#xff1a; #pragma once #include <QObject> #include "file…

模拟实现strcat(字符串追加)

1.我们要知道stcat的作用是什么&#xff0c;字符串追加。 2.我们进行模仿&#xff0c;我们先将arr1不断&#xff0c;直到“\0”,我们加在后面。 //模拟实现strcat(字符串追加) char* my_strcat(char* arr1, const char* arr2) {assert(arr1 && arr2);char ret arr1;…

揭秘!格行随身WiFi:如何在‘内卷’市场中逆袭?如何重新定义市场新标准?随身WIFI哪个品牌网速快,续航时间长?随身WiFi热卖第一名

近年来&#xff0c;随身WiFi市场竞争激烈&#xff0c;部分商家为追求利润最大化&#xff0c;不惜采取偷工减料等不正当手段&#xff0c;导致产品质量参差不齐&#xff0c;消费者在使用过程中频繁遭遇信号不稳定、网络卡顿、电池不耐用等问题。这种“内卷”现象不仅损害了消费者…

Hive命令为表增加字段(内置数据库)

【实验目的】 1) 了解hive操作命令 2) 熟练操作hive数据库 【实验原理】 进入hive shell环境&#xff0c;确保hive中存在已经创建的表结构&#xff0c;然后可以通过alter命令对表的字段进行修改。 【实验环境】 本次环境是&#xff1a;centos6.5 Hadoop-2.4.1 jdk1.7.0_7…

【数据结构与算法】单链表、双链表和循环单链表中头指针未知的情况下能否删除某节点

在单链表、双链表和循环单链表中&#xff0c;若仅知道指针p指向某结点&#xff0c;不知道头指针&#xff0c;能否将结点p从相应的链表中删去&#xff1f;为什么&#xff1f;若可以&#xff0c;其时间复杂度各为多少&#xff1f; 单链表&#xff1a;不能 在单链表中&#xff0c…

一些爬虫代码的解析

import requests from bs4 import BeautifulSoup import time import logging import json from concurrent.futures import ThreadPoolExecutor import random# 配置日志 logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s)# 目标网页…

rocket 如何解决消息堆积问题、如何消息丢失问题、r安全问题(设置密码)、时间复杂度。

20240803 一、 如何解决消息堆积问题&#xff1f;一般认为单条队列消息差值>10w时 算堆积问题生产太快了线程数量的设置挤压问题 消费者消费出现问题如果堆积的消息不想要了&#xff0c;可以直接跳过堆积 二、 信息丢失问题为什么会丢失解决思路1 记录下来解决思路2 使用roc…