首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

已解决C# 尝试读取或写入受保护的内存,这通常指示其他内存已损坏(含常见解决办法)

1.dll文件应该是C++写的。封装了之后供我的C#程序调用,结果就提示了错误:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。...跨线程操作引起的?因为dll控制的是硬件,应该绑定的是窗体句柄。我操作的时候是在一个事件event中操作的,大家知道event是另开线程的。...原来是跨线程操作com口引起的错误。 情况2:调用出现问题 在C#中调用别人的DLL的时候有时候出现 尝试读取或写入受保护的内存 。这通常指示其他内存已损坏。...在传值的时候还是用指针,再在C#中做转换就好了。...情况3:添加控件出现问题 很多人用C#编程的时候会碰到这个问题。

4.9K10

VC++编写ActiveX控件

,里面涉及一个响应用PLC的采集信息的问题(PLC用串口和工控机相连接),然后思考如何用C#写串口通讯程序,结果师兄在一旁直接用VC++写了一个“*.ocx控件”,并在自己的电脑上进行了测试,完工后就把生成的...完成上面的步骤后,就可以像使用普通控件一样在VC中使用此控件了(右击此控件,可以查看此控件的“事件”和“属性”,就是你在编写控件源码时的那些“外部名称External name”)。...比如,本文中的ActiveX控件的自定义事件中,是通过鼠标移动来触发,那么在应用程序中,只要鼠标移动到控件上,那么就会触发此自定义事件,并获取当前鼠标位置的橫坐标。 4....最后一些Tip 1) 在自定义控件时,可在控件源码的OnDraw()函数中设置控件的外观(也就是控件被拖入到应用程序中时呈现的样子,一般默认是一个白色的方框内切椭圆的样式)。...2) 用C#来使用ActiveX的事件时,事件所产生的数据都包含在Event变量中,只需要用个点运算符就可以取出来了。

3.5K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    dotnet 从入门到放弃的 500 篇文章合集

    不能用于文件名的字符 C# 判断两条直线距离 C# 判断系统版本 C# 动态加载卸载 DLL C# 复制列表 C# 如何写 DEBUG 输出 C# 如何在项目引用x86 x64的非托管代码 C# 已知点和向量...dll打包到程序中 c-70 c-设计模式-责任链 cant found Microsoft.VSSDK.BuildTools.15.0.26201 C# 6.0 字符串 String Interpolation...uwp 获取按钮鼠标左键按下 win10 uwp 获取文件夹出错 win10 uwp 获得元素绝对坐标 win10 uwp 获得缩略图 win10 uwp 萤火虫效果 win10 uwp 让焦点在点击在页面空白处时回到...WPF Process.Start 出现 Win32Exception 异常 WPF UncommonField 类型是什么 wpf VisualBrush 已知问题 WPF 一个性能比较好的 gif...WPF 弹出 popup 里面的 TextBox 无法输入汉字 WPF 拖动时出现 Invalid FORMATETC structure WPF 拖动滚动 wpf 拦截异常 让多线程异常不会让程序闪退

    10.5K20

    快速入门系列--CLR--02多线程

    通过研究dump,初步发现是由于配置服务器出现单点故障,然后应用通过多线程调用相关SOA服务时出现异常,引发了ThreadAbortException异常,而且由于原有异常处理代码不够严谨,而且与异步发送报警邮件紧密结合在一起...线程(Thread)是进程中的基本执行单元,在进程入口执行的第一个线程被视为这个进程的主线程。在.NET应用程序中,都是以Main()方法作为入口的,当调用此方法时系统就会自动创建一个主线程。...内核模式栈,当调用内核API时会使用 DLL线程连接和分离通知,windows每创建一个线程就会加载所有DLL中的入口方法,并传递一个dll_thread_attach的方法,当加载dll很多是,这个操作会造成很大的性能消耗...更改线程池中的最大线程数时需谨慎。虽然这类更改可能对您的代码有益,但对您使用的代码库可能会有不利的影响。 将线程池大小设置得太大可能导致性能问题。...因为在完成端口理想模型中,每个线程都可以从系统获得一个"原子"性的时间片,轮番运行并检查完成端口,线程的切换是额外的开销。在实际开发的时候,还要考虑这些线程是否牵涉到其他堵塞操作的情况。

    91990

    .NETC# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑

    的句柄(可在 dll 的入口函数中获取);而我们是托管代码 dwThreadId 是线程 Id,传入 0 则为全局所有线程,否则传入特定的线程 Id 需要注意的坑 模块句柄传什么?...本文一开始被注释掉的代码中,我使用 Marshal 直接从托管程序集中获取了模块句柄。 这里需要说明,托管程序集不能注入到其他进程,因此也不可以挂接钩子。...在 CreateWindowEx 创建窗口时传入的消息处理函数会仅处理特定窗口的消息,然而当通过钩子的方式来处理消息的话,无法精确定位到某个特定的窗口,只能针对消息循环所在的线程。...因此,要处理特定窗口的消息,只能先拿到此窗口所在的线程。 前面的 P/Invoke 中我也预留了获取窗口所在线程的方法。因此,可以直接使用以下调用来获取 hWnd 句柄窗口所在的线程。...然而 .NET 程序集无法被注入到其他进程;随便用一个其他 dll 时,里面没有被挂接的函数地址,在注入后就会导致目标进程崩溃。

    1.5K20

    通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

    举个经典的例子:Newtonsoft.Json的版本警告,大多数人都知道通过版本重定向来解决这个问题,但很少有人会琢磨为什么会出现这个问题,找了一圈文章,没找到一个解释的。...简单延伸两个问题,mscorlib.dll被加载在哪里?内存堆中又是什么样的一个情况?...该应用程序域的局部存储值,该存储不划分上下文和线程,均可通过GetData获取。...在CLR中的栈主要用来执行线程方法时,保存临时的局部变量和函数所需的参数及返回的值等,在栈上的成员不受GC管理器的控制,它们由操作系统负责分配,当线程走出方法后,该栈上成员采用后进先出的顺序由操作系统负责释放...、ASP.NET相关事件、代码发送的HTTP请求、程序集加载卸载事件、文件访问打开关闭事件、Winform/Webform/WPF动作事件、线程事件、环境变量、Console/Trace等输出...

    4.6K30

    Alternative Process Injection

    获取可操作DLL 一般情况下:如果我们把shellcode写进现有的 DLL 内存页面时,进程可能会崩溃,因为该内存页面已被进程使用。...那么我们如果需要注入到正在加载中的dll时,我们需要满足以下条件: 内存页应该属于 .text 部分,因为它本质上在内存页上具有执行权(即PAGE_EXECUTE_READ ) 内存页应该提供足够的空间来存储...shellcode 覆盖内存页中的字节不应使进程崩溃 DLL 由不同的进程共同加载 在原文中作者给出了一个用来测试的C# static void Main(string[] args) { string...粗暴的理解,这个技术就是把 shellcode 复制到一个 DLL 的 .text 段,并且这个 DLL 不会引起进程的奔溃(有些 DLL 只需要执行一次,没有 free ,所以覆盖没问题)带来的效果,...模块,因为新加载的库不是使用 LdrLoadDll 调用的 但是并不是很稳定,目标进程很可能在注入后无法使用,例如我花了一点时间来怎么样注入到ESET中时,eset的进程就会崩溃,(可能是DLL的问题)

    96240

    .NET周刊【1月第3期 2025-01-19】

    文章详细回顾了故障原因,强调了非主线程创建控件对主线程信息处理的影响。作者从个人经历出发,分享了显著的实用价值,提及了之前的研究文章以支持论点。...C#钩子(Hook) 捕获键盘鼠标所有事件 - 5分钟没有操作,自动关闭 Form 窗体 https://www.cnblogs.com/vipsoft/p/18668517 本文讲述C#中的钩子技术,...书签用于暂停执行,等待外部事件后再恢复流程。以请假审批流程为例,阐述了如何在主管审核与经理审核之间使用书签控制流程进展。...主线程在Main()方法中执行,后台线程和前台线程的主要差异在于执行持续时间。C#中可以通过Thread.IsBackground属性判断并设置线程类型。...窗体应用程序在绘制窗口时可能会遇到问题。

    6410

    通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

    程序集的加载方式 对于自身程序集内定义的类型,我们可以直接从自身程序集中的元数据中获取,对于在其它程序集中定义的类型,CLR会通过一组规则来在磁盘中找到该程序集并加载在内存。...举个经典的例子:Newtonsoft.Json的版本警告,大多数人都知道通过版本重定向来解决这个问题,但很少有人会琢磨为什么会出现这个问题,找了一圈文章,没找到一个解释的。...简单延伸两个问题,mscorlib.dll被加载在哪里?内存堆中又是什么样的一个情况?...在CLR中的栈主要用来执行线程方法时,保存临时的局部变量和函数所需的参数及返回的值等,在栈上的成员不受GC管理器的控制,它们由操作系统负责分配,当线程走出方法后,该栈上成员采用后进先出的顺序由操作系统负责释放...、ASP.NET相关事件、代码发送的HTTP请求、程序集加载卸载事件、文件访问打开关闭事件、Winform/Webform/WPF动作事件、线程事件、环境变量、Console/Trace等输出...

    2.8K63

    使用C#编写一个.NET分析器(一)

    第二个原因是,它所有的文档和示例都是使用C++编写的,而且目前也没有C#的示例。 从理论上来说,大多数语言都可以来编写.NET分析器。例如,这里有人使用Rust的Demo。...使用C#几乎是不可能的,如果使用C#和.NET编写一个Profiler,它将与分析的应用程序同事运行,这会导致一些问题: 由于分析器是一个.NET库,因此它最终会分析自身。...列如,当JIT编译所分析的应用程序方法时,会引发一些分析的事件,比如JITCompilationStarted、JITCompilationStarted、JITCompilationStarted等等...即使你设法找到了该问题的修复方法,还有一个更实际的问题:在运行时初始化的过程中,分析器被很早的加载,而这时系统还没有准备好运行.NET代码。...当调用虚方法时,运行时将首先获取vtable,然后使用它获取实现的地址。 vtable有更多的特性,例如处理多重继承,但是我们不需要了解这些。

    80110

    一文看懂 .NET 的异常处理机制、原则以及最佳实践

    AppDomain.UnhandledException 应用程序域未处理的异常,任何线程中未处理掉的异常都会进入此事件中 当这里能够收到事件,意味着应用程序现在频临崩溃的边缘(从设计上讲,都到这里了,...也再没有任何代码能够使得程序从错误中恢复了) 不过也可以配置 legacyUnhandledExceptionPolicy 防止后台线程抛出的异常让程序崩溃退出 建议在这个事件中记录崩溃日志,然后对应用程序进行最后的拯救恢复操作...中获取比较完整的异常堆栈) 注意第一次机会异常事件即便异常会被 catch 也会引发,因为它引发在 catch 之前 不要认为异常已经被 catch 就万事大吉可以无视这个事件了。...如果在此事件中监听到异常,通常意味着代码中出现了不正确的 async / await 的使用(要么应该修改实现避免异常,要么应该正确处理异常并从中恢复错误) 对于 GUI 应用程序,还可以监听 UI 线程上专属的全局异常...AccessViolationException 当出现此异常时,说明非托管内存中发生了错误。如果要解决问题,需要从非托管代码中着手调查。 这个异常是访问了不允许的内存时引发的。

    88241

    金三银四面试:C#.NET面试题中高级篇4,高薪必备

    C#实现方法 闭包就是能够读取其他函数内部变量的函数。C#通过Lambda表达式可以访问Lambda表达式块外部的变量,这成为c#闭包。...当引用外部变量时,需要注意,外部变量变化时,lambda表达式的结果也可能会随着外部变量变化而变化。...(3) 事件的卸载   这个不是必须的,推荐这样做。之前注册了的事件,关闭画面时应该手动注销,有利于GC回收资源。...,有几个await就有几个状态号; (3)每次执行完一个状态,都重复回调状态机的MoveNext方法,同时指定下一个状态号; (4)MoveNext方法还需处理线程和异常等问题。...我们可以把session对象序列化到硬盘中,需要时在反序列化,减少内存压力。

    95860

    Shellcode 技术

    4.导入表混淆 您希望避免可疑的 Windows API (WINAPI) 出现在我们的 IAT(导入地址表)中。此表包含您的二进制文件从其他系统库导入的所有 Windows API 的概述。...当我们在加载器进程空间的线程中运行 shellcode 时,更容易混入进程中良性线程执行和内存操作的噪音。然而,不利的一面是任何崩溃的开发后模块也会导致加载程序的进程崩溃,从而导致植入程序崩溃。...从规避的角度来看,调用直接系统调用有两个问题: 您的二进制文件最终得到了syscall易于静态检测的指令又名“系统调用的标记” 与通过其ntdll.dll等效调用的系统调用的良性使用不同,系统调用的返回地址不指向...在此期间,植入物容易受到来自 EDR 的内存扫描技术的攻击。本文中描述的两种规避方法中的第一种是欺骗线程调用堆栈。 当植入物处于休眠状态时,它的线程返回地址指向我们驻留在内存中的 shellcode。...这种技术可以防止Sleep()植入物在睡眠时出现可检测的钩子。 Mariusz Banach也在ShellcodeFluctuation中实现了这种技术。

    1.6K20

    C#——写一个控件库

    摘要: C#中的自定义控件中的属性(Property)、事件(Event)及一些相关特性(Attribute)的总结 今天学习了下C#用户控件开发添加自定义属性的事件,主要参考了MSDN,总结并实验了一些用于开发自定义属性和事件的特性...的事件中,就会出现BtnTestClick了 ?...如下图:BtnName被标记为“EditorBrowsableState.Never”,因此这个属性不会出现在VS的智能提示(学名叫IntelliSense)中,但如果写到代码里,却没有问题。 ?...但如果这个控件时被放在一个dll文件中添加引用到当前的解决方案中,EditorBrowsable特性才能按其文字描述中说明的那样起作用。...(如Localizable被用于指定属性是否可本地化、DefaultValue用于为属性指定另一个“默认值”等),如只是初步了解可以去查看VS从程序集 System.Windows.Forms.dll中反射出的各控件

    1.9K41

    《CLR via C#》Part2之Chapter4 类型基础(二)

    Eg: C#可直接将一个对象转换为它的任何基类,因为向基类转换被认为是一种安全的隐式转换。但是将对象向它的某个派生类转换时,C#要求必须显示转换,因为这种转换可能在运行时报错。...命名空间和程序集 在C#中我们使用using引入命名空间,但是CLR并不知道命名空间的任何事,访问一个类型时,CLR需要知道类型的完整名称(长的、包括句点符号的名称)以及该类型的定义具体在哪个程序集中。...默认情况下,C#编译器会自动在MSCorLib.dll程序集中查找“引用的类型”,即使你没有显式的告诉它。...如:using alias = Isaac.Test; C#还提供了一个名为“外部别名(extern alias)”(外部别名甚至还允许从同一个程序集中的不同版本访问一个类型) ?...在这个进程中,可能存在多个线程。一个线程创建时,会分配到一个1M大小的栈,这个栈的空间用于向方法传递参数。 M1方法开始执行时,在线程栈上分配局部变量name的内存,如下图: ?

    40430

    黑神话上线了,想起来学Lua了?

    ,同时 TypeScript 语法与工程化能力都非常卓越,让码农们出现问题时第一时间想的不是喷语言的设计,而是从自己写的代码身上找原因,大大提升开发人员的幸福感以及团队内部的和谐程度。...为外部开发者封装好 C#/Android 层调用。...4.1.3 热更新设计序列图 4.1.4 C# 代码动态加载方案使用系统 api System.Reflection.Assembly::Load 反射加载 dll 中的 C# 代码,将 C# 脚本动态绑定到物体上...4.2 容灾方案作为一个嵌入到宿主应用的 Unity SDK 方案,我们通过热更新做到了业务无痛升级,但是如果外层的热更新框架出现严重 bug 想要发布升级,则难度巨大,需要推动外部开发者升级发布,而外部开发者升级意愿并不强烈...代码热更新: 实现了从资源 dll 中读取 C# 类 HotCodeSample (见下文)并挂载到图中 Cube(Clone) 上,该脚本成功被 unity 调用执行 HotCodeSample::Start

    25710

    黑神话上线了,想起来学Lua了?

    ,同时 TypeScript 语法与工程化能力都非常卓越,让码农们出现问题时第一时间想的不是喷语言的设计,而是从自己写的代码身上找原因,大大提升开发人员的幸福感以及团队内部的和谐程度。...为外部开发者封装好 C#/Android 层调用。...4.1.3 热更新设计序列图 4.1.4 C# 代码动态加载方案 使用系统 api System.Reflection.Assembly::Load 反射加载 dll 中的 C# 代码,将 C#...4.2 容灾方案 作为一个嵌入到宿主应用的 Unity SDK 方案,我们通过热更新做到了业务无痛升级,但是如果外层的热更新框架出现严重 bug 想要发布升级,则难度巨大,需要推动外部开发者升级发布,而外部开发者升级意愿并不强烈...代码热更新: 实现了从资源 dll 中读取 C# 类 HotCodeSample (见下文)并挂载到图中 Cube(Clone) 上,该脚本成功被 unity 调用执行 HotCodeSample::Start

    87042

    黑神话上线了,想起来学Lua了?

    ,同时 TypeScript 语法与工程化能力都非常卓越,让码农们出现问题时第一时间想的不是喷语言的设计,而是从自己写的代码身上找原因,大大提升开发人员的幸福感以及团队内部的和谐程度。...为外部开发者封装好 C#/Android 层调用。...4.1.3 热更新设计序列图 4.1.4 C# 代码动态加载方案使用系统 api System.Reflection.Assembly::Load 反射加载 dll 中的 C# 代码,将 C# 脚本动态绑定到物体上...4.2 容灾方案作为一个嵌入到宿主应用的 Unity SDK 方案,我们通过热更新做到了业务无痛升级,但是如果外层的热更新框架出现严重 bug 想要发布升级,则难度巨大,需要推动外部开发者升级发布,而外部开发者升级意愿并不强烈...代码热更新: 实现了从资源 dll 中读取 C# 类 HotCodeSample (见下文)并挂载到图中 Cube(Clone) 上,该脚本成功被 unity 调用执行 HotCodeSample::Start

    20410
    领券