VB自定义异常处理

11、VB.NET编程:接口实现、异常处理与设计模式应用 本文详细介绍了VB.NET编程中的接口实现、异常处理和设计模式的应用。涵盖了为类实现IComparable和IEnumerable接口、使用Try-Catch-Finally处理异常、创建自定义异常类,以及共享工厂方法和单例模式的设计与应用场景。通过具体示例代码和练习拓展,帮助开发者编写更健壮、高效的VB.NET程序。 阅读详情

模块:
Option Explicit

Public Const EXCEPTION_MAXIMUM_PARAMETERS = 15

' -----------------------------
' Exception-Handling Structures
' -----------------------------
Type EXCEPTION_POINTERS
     pExceptionRecord As Long       'pointer to an EXCEPTION_RECORD struct
     pContextRecord As Long          ' pointer to a CONTEXT struct
End Type

Type EXCEPTION_RECORD
     ExceptionCode As Long
     ExceptionFlags As Long
     pExceptionRecord As Long    ' Pointer to an EXCEPTION_RECORD structure
     ExceptionAddress As Long
     NumberParameters As Long
     ExceptionInformation(EXCEPTION_MAXIMUM_PARAMETERS) As Long
End Type

' ----------------------------
' Exception-Handling Functions
' ----------------------------
' Set lpTopLevelExceptionFilter parameter to AddressOf <New Handler>, or use 0 to restore default
' Returns address of previous exception handler
Declare Function SetUnhandledExceptionFilter Lib "kernel32" ( _
   ByVal lpTopLevelExceptionFilter As Long _
) As Long

Declare Function GetExceptionCode Lib "kernel32" () As Long

' Returns a pointer to an EXCEPTION_POINTERS structure
Declare Function GetExceptionInformation Lib "kernel32" () As Long

' Not used in this example
Declare Function RaiseException Lib "kernel32" ( _
   dwExceptionCode As Long, _
   dwExceptionFlags As Long, _
   nNumberOfArguments As Long, _
   lpArguments As Long _
   ) As Long

Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
   lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)


Public Function GetException(vValue As Variant) As String

' Function returns name of constant for given value.

Dim sName As String

Select Case vValue

   Case &HC0000005
      sName = "EXCEPTION_ACCESS_VIOLATION"
   Case &HC000008C
      sName = "EXCEPTION_ARRAY_BOUNDS_EXCEEDED"
   Case &H80000003
      sName = "EXCEPTION_BREAKPOINT"
   Case -1
      sName = "EXCEPTION_CONTINUE_EXECUTION"
   Case 0
      sName = "EXCEPTION_CONTINUE_SEARCH"
   Case &H80000002
      sName = "EXCEPTION_DATATYPE_MISALIGNMENT"
   Case 1
      sName = "EXCEPTION_DEBUG_EVENT"
   Case 1
      sName = "EXCEPTION_EXECUTE_HANDLER"
   Case &HC000008D
      sName = "EXCEPTION_FLT_DENORMAL_OPERAND"
   Case &HC000008E
      sName = "EXCEPTION_FLT_DIVIDE_BY_ZERO"
   Case &HC000008F
      sName = "EXCEPTION_FLT_INEXACT_RESULT"
   Case &HC0000090
      sName = "EXCEPTION_FLT_INVALID_OPERATION"
   Case &HC0000091
      sName = "EXCEPTION_FLT_OVERFLOW"
   Case &HC0000092
      sName = "EXCEPTION_FLT_STACK_CHECK"
   Case &HC0000093
      sName = "EXCEPTION_FLT_UNDERFLOW"
   Case &H80000001
      sName = "EXCEPTION_GUARD_PAGE"
   Case &HC000001D
      sName = "EXCEPTION_ILLEGAL_INSTRUCTION"
   Case &HC0000006
      sName = "EXCEPTION_IN_PAGE_ERROR"
   Case &HC0000094
      sName = "EXCEPTION_INT_DIVIDE_BY_ZERO"
   Case &HC0000095
      sName = "EXCEPTION_INT_OVERFLOW"
   Case &HC0000026
      sName = "EXCEPTION_INVALID_DISPOSITION"
   Case &HC0000008
      sName = "EXCEPTION_INVALID_HANDLE"
   Case 15
      sName = "EXCEPTION_MAXIMUM_PARAMETERS"
   Case &HC0000025
      sName = "EXCEPTION_NONCONTINUABLE_EXCEPTION"
   Case &HC0000096
      sName = "EXCEPTION_PRIV_INSTRUCTION"
   Case &H80000004
      sName = "EXCEPTION_SINGLE_STEP"
   Case &HC00000FD
      sName = "EXCEPTION_STACK_OVERFLOW"
   Case Else
      sName = "<invalid>"

End Select

GetException = sName

End Function

' This function receives the address of an EXCEPTION_POINTERS structure in its parameter
Function NewExceptionHandler(ByRef lpExceptionPointers As EXCEPTION_POINTERS) As Long

' No need to return a value since Err.Raise will alter execution flow

Dim er As EXCEPTION_RECORD
Dim sError As String

' Make a copy of the exception record portion
' of the passed-in EXCEPTION_POINTERS structure
CopyMemory er, ByVal lpExceptionPointers.pExceptionRecord, Len(er)

' Set up error description string
Do
   sError = GetException(er.ExceptionCode)
   ' Special treatment for access violation -- get addresses
   If sError = "EXCEPTION_ACCESS_VIOLATION" Then
      sError = sError & " - Instr @ &H" & Hex(er.ExceptionAddress) _
         & " tried illegally to " _
         & IIf(er.ExceptionInformation(0) = 0, "read from address", "write to address") _
         & " &H" & Hex(er.ExceptionInformation(1))
   End If
  
   ' Check for nested error
   If er.pExceptionRecord = 0 Then Exit Do
  
   ' Nested error exists
   ' Replace this er by the nested er
   CopyMemory er, ByVal er.pExceptionRecord, Len(er)
  
   ' New line for next error
   sError = sError & vbCrLf
Loop
  
' Raise an error to go up the call stack, passing the externally generated error!
Err.Raise 1000, "NewExceptionHandler", sError

End Function
 

 窗体:
Option Explicit

Private Sub cmdRaiseException_Click()

Dim lpDest As Long
Dim lng As Long

On Error GoTo ERR_RaiseException

lng = 5

CopyMemory ByVal lpDest, ByVal VarPtr(lng), 1

MsgBox "Recovered from GPF"

Exit Sub
ERR_RaiseException:
   MsgBox Err.Description
   Resume Next
End Sub

Sub SetHandler()
SetUnhandledExceptionFilter AddressOf NewExceptionHandler
End Sub

Sub RestoreHandler()
SetUnhandledExceptionFilter 0
End Sub

Private Sub Form_Load()
SetHandler
End Sub

Private Sub Form_Unload(Cancel As Integer)
RestoreHandler
End Sub

80、VB.NET 错误处理与调试全解析 本文深入解析了 VB.NET 中的错误处理和调试技巧,涵盖了异常处理机制、自定义异常抛出、Finally 块的使用以及调试工具如断点、逐步执行、本地窗口和监视窗口的应用。通过一个统计字符串中元音字母数量的具体示例,展示了从发现问题、调试分析到修复错误的完整过程,并强调了测试在软件开发中的重要性,帮助开发者提高程序的稳定性和可靠性。 阅读详情

相关推荐

VB数据验证:实现输入检查的完整指南

本文还有配套的精品资源,点击获取 简介:在VB编程中,确保用户输入数据的准确性和安全性是至关重要的任务。本指南深入探讨了在VB中实现数据验证的多种技术,包括使用控件的验证属性、事件驱动编程、正则表达式验证、自定义函数验证、提供错误提示、异常处理、表单级别验证以及控件间依赖关系的验证。掌握这些验证技巧能够帮助开发者构建健壮的表单应用,提升用户体验并防止错误。 1. 输入...

weixin_35748962的博客 1298

VB6 异常捕捉 Try catch

请看一个VB.NET结构化异常处理的例子。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click         Dim i As Long, j As Long         j = 0         Try       

NCTU_to_prove_safety的博客 1万+

VB.NET中高级编程技巧与概念教程

在某些情况下,内置的异常类可能不满足特定的需求。此时,开发者可以创建自定义异常类以提供更详细的错误信息。自定义异常类通常继承自基类或其子类,并可以重写构造函数以接受更多自定义信息。下面是一个创建自定义异常类的例子:End SubEnd SubEnd Class在创建了自定义异常类后,就可以在代码中像抛出其他异常一样抛出这个异常:Throw New MyCustomException("这是一个自定义异常信息。")在本章节中,我们探讨了如何在VB.NET中实现高级数据库操作。

weixin_42515842的博客 953

如何在VB中处理异常和错误

除了使用系统提供的异常类型外,你还可以创建自己的异常类,以提供更具体的错误信息和处理逻辑。vb复制代码End SubEnd Class' 使用自定义异常Throw New MyCustomException("这是一个自定义的异常信息。")

2402_84885073的博客 1302

VB实时曲线模块:打造高效数据可视化工具

在现代数据可视化软件中,用户自定义曲线设置是提供灵活性和满足不同用户需求的重要功能。它允许用户根据自己的偏好设定曲线的视觉属性,如颜色、线型、粗细等,以及调整数据点的显示效果。此外,通过交互效果和动画,用户能够更好地理解数据变化趋势。本章将深入探讨这些方面,确保读者理解如何实现用户友好的曲线自定义功能。为了实现颜色、线型和粗细的自定义,开发者通常会提供一个配置界面,让用户可以手动选择或输入这些属性值。这可以通过在图形用户界面(GUI)中嵌入滑块、颜色选择器和预设样式列表来完成。

weixin_35871529的博客 1147

VB.NET用户界面设计实务与教程

用户界面(UI)设计是软件开发中不可或缺的部分,它直接影响用户对应用程序的使用体验。良好的UI设计不仅需要考虑美观性,还要保证功能性和易用性,确保用户能够直观、高效地与应用程序交互。在VB.NET中,UI设计是通过集成Windows Forms框架来实现的,它是开发基于Windows的桌面应用程序的基石。Windows Forms是微软公司推出的一个基于.NET Framework的应用程序框架,用于快速开发Windows平台下的桌面应用程序。

weixin_34535286的博客 1230

VBA学习笔记六(异常处理)

VBA异常处理异常处理综述异常处理方法分类默认方法三级目录参考文章 异常处理综述 在vba代码中并没有 try catch异常处理语句,但有 on error 语句和try catch语句的功能类似; 其形式如:on error +处理方式 异常处理方法分类 语法 功能 on error GoTo 0 默认报错 ,和不使用该语句报错情况相同 on error Resume Next 出现异常后忽略异常,继续执行下一条语句 on error goto [标志语句] 出现异常后,跳转到标

Sampson的博客 7032

VB程序中自定义菜单字体大小的实现

Visual Basic(VB)是微软推出的一种简单易用的编程语言,广泛应用于快速应用程序开发。菜单编辑器是VB开发环境中的一个工具,它允许开发者通过图形界面创建、编辑和管理应用程序的菜单系统。菜单编辑器提供了一个可视化的界面,让程序员可以轻松地添加菜单项、子菜单和分隔符,无需深入编写复杂的代码。菜单编辑器的主要功能包括:- 快速设计菜单布局。- 为每个菜单项设置标题、快捷键和访问权限。- 自定义菜单项的样式,比如字体、颜色和图标。

weixin_42571280的博客 934

VB程序错误处理方法

大家知道,即使顺序员抱有最好的愿望,而且计划工作做得非常周密,也无法防止代码泛起错误。现实上可能泛起的顺序错误是许多的,但是它们基本上可以分为两种类型:一种是编译错误;另一种是运行期错误。编译错误是指使得Visual Bacsic(下面简称VB)的编译器无法对代码进行编译的错误。假如一个历程中包含了编译错误,VB将不执行该历程,并且我们也不能向用户提供带有编译错误的运行期版本应用顺序,大多数编译错

3973

VB Exception

NULL 博文链接:https://xiaoss.iteye.com/blog/1863471

【抖音滑动验证码风控分析】

文章摘要:通过对比正常响应与验证码风控响应的头部信息,发现两者存在显著差异。正常响应返回JSON格式数据(Content-Type: application/json)并采用分块传输(Transfer-Encoding: chunked),而风控响应仅返回空文本(Content-Type: text/plain,Content-Length: 0),并通过X-Vc-Bdturing-Parameters等特殊头字段传递风控信息。这些差异主要体现在内容类型、数据传输方式和风控标识参数上,为风控识别提供了关键特

qq_44990881的博客 1099

VB.Net - 异常处理

VB.Net - 异常处理异常是在程序执行期间出现的问题。 例外是对程序运行时出现的异常情况的响应,例如尝试除以零。异常提供了一种将控制从程序的一个部分转移到另一个部分的方法。 VB.Net异常处理建立在四个关键字:Try,Catch,Finally和Throw。Try: A Try block identifies a block of code for which particular exc...

9.歌工作室 1638

神联动:LSTM+卡尔曼滤波!一区大门轻松开!

近来热度飙升,成为时间序列预测和状态估计等领域的香饽饽,非常好发高区!主要在于:这两者结合,不仅能提高模型预测准确性;还能拓展应用场景,为我们的论文创新提供发挥空间,且当下还在蓝海阶段,还不算卷。具体点说:卡尔曼滤波擅长处理线性状态估计和噪声,能使LSTM更好地适应动态环境的变化,减少噪声干扰,降低预测误差。而LSTM通过捕捉长期依赖关系,擅长处理非线性时间序列,能够弥补卡尔曼滤波在这方面的不足,从而把应用场景从传统的状态估计,延伸到金融预测、工业检测、自动驾驶等任务。

2401_82426425的博客 2208

VB.NET 异常处理

在项目开发中,错误和异常是不可避免的。为了尽可能多的避免类似情况,VB.net中提供了一种异常处理机制,允许开发者捕捉程序运行时可能出现的异常。     我们在学习VB6.0的时候,学到ONError的错误语句。与传统VB6.0中的OnError语句相比.NET平台的异常处理机制更加灵活,而且使用更加方便。异常处理分离了接收和处理错误代码。这个功能理清了编程者的思绪,也帮助代码增强了可读性,方便

小火子 5613

《玩儿起来吧》MATLAB 实时图像处理系列(一二三四)

大家学了图像处理之后,是不是就想学以致用。而要用于生活中,最好的方式就是和摄像头搭配,实现实时图像处理。今天就给大家分享MATLAB实时图像处理的基础方法,希望能帮你快速入门。

HPC_ZY 1万+

ASF-YOLO:一种基于注意尺度序列融合的细胞实例分割YOLO模型

随着样本制备技术和显微成像技术的快速发展,细胞图像的定量处理和分析在医学、细胞生物学等领域发挥着重要作用。基于卷积神经网络(CNN),可以通过神经网络训练学习不同细胞图像的特征信息,具有很强的泛化性能。两阶段的R-CNN系列[1,2,3]及其一阶段变体[4,5]是实例分割任务的经典CNN基础框架。在最近的研究中,You Only Look Once(YOLO)系列[6,7,8,9]已经成为实时实例分割中速度最快、最准确的模型之一。

m0_47867638的博客 9789

icemocha 翻译系列(1)-VB.Net的异常处理

Page OptionsLife Without On Error Goto StatementsDeborah KurataInStep Technologies, IncJuly 11, 2003Summary: In previous versions of Visual Basic, the best practice for handling errors was put On Erro

icemocha的专栏 1112

Acgis中实现栅格经纬度和行政区关联

目前已有意大利的shp文件,希望将意大利划分成0.1*0.1经纬度的栅格,并且关联每个栅格中心点所属的省份信息。最终希望得到的输出是一个表格,里面包含栅格的经纬度、所属省份信息。

qq_42183184的博客 3369

聊聊.net中的异常处理

.net,异常处理

wojichouxin的专栏 335

UE4_SpeedTree Shader源码分析

目录 1.UMaterialExpressionSpeedTree::Compile 2.Compiler->SpeedTree 3.GetSpeedTreeVertexOffset 4.Scene中的SpeedTree应用 (Scene->UpdateSpeedTreeWind) 5.GetSpeedTreeVertexOffsetInner 由于之后做风场,也需要在S...

zzgyy123的专栏 2629

四足机器人通用运动控制策略:强化学习与PD参数优化

运动控制是机器人实现稳定行走和复杂动作的核心技术,其关键在于精确调节关节的刚度和阻尼特性。PD控制器作为基础控制单元,通过比例(P)和微分(D)增益参数直接影响系统响应速度与稳定性。在四足机器人领域,强化学习(RL)通过模拟环境自主学习,能够有效解决传统控制方法难以适应不同形态机器人的痛点。该技术通过非对称Actor-Critic架构,结合状态估计网络和自适应参数采样策略,实现了跨平台的通用运动控制。典型应用包括工业检测、灾害救援等需要高适应性移动能力的场景,其中PD增益优化和形态参数自适应采样成为提升硬件

weixin_30307921的博客 298

在VB 2005中定制自己的异常

  提要 本文在简要分析VB 2005所提供的异常处理机制的同时,详细讨论如何用它所提供的异常类定制自己的异常。  结构化异常处理是随着.NET的第一个版本的发行而加入到Visual Basic语言中的。结构化异常处理的重要性基于下面两个原因:  1. 与以前的On Error Goto...语句相比而言,通过使用一种与该语言其它部分更适应的语法从而使得代码更具有可读性。  2. 比以前的On E

sunxy的收藏夹 770

82、yolov11检测模型迁移瑞芯微rk3588和使用昇腾设备300i DUO卡推理 batch=1/3,支持昇腾NMS迁移npu推理

本文介绍了使用昇腾设备进行分割推理的测试流程,包括两种测试方式(cann+onnx和om)。首先验证300iDUO卡的可用性,随后创建Docker镜像和容器以搭建独立环境。通过从指定仓库拉取Ubuntu 20.04镜像,创建容器并映射目录。进入容器后安装必要组件(Python3、GCC等)和系统工具(pciutils、net-tools等),为后续模型转换和迁移做准备。整个流程旨在构建可交付给第三方的标准化测试环境。

sxj731533730 1198

vb.net和c#的区别

用vb.net和c#都有一段时间了,虽然知道其中不仅仅只有语法的差异,但一直没时间一一研究到底有哪些不同,今天突然在网上看到一网友提供了此心得,遂转载。 //全局层 VB支持Module,是一种全部成员都是静态的特殊类型 C#支持static class,和VB的Module类似; VB的Imports语句可以把类的静态成员导入,而C#的using语句没有这个功能 Imports

江船野火纵余生 940

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VB.net 基础知识----循环,类

一. 常用变量类型,FCL和VB的对应关系 二. .net 框架 三. For 循环 (已知被循环的所有数) Dim nums() As Integer = {10,25,30,45,50,65} For index As Integer = 0 To nums.Length - 1 Step 2 Dim value As Integer = nums(index) ...

Stephanie的博客 526

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

VB.NET 2003 Windows 应用全程自定义构建技术要点

一.自定义控件构建方法二.根据给定的方法文字名,让方法得到执行三.得到OracleCommand的SQL文四.用exception.StackTrace获得程序错误信息五.用EventLog把程序错误出力到Windows应用错误窗口上

daliandhc的专栏 388

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: 变体类型在循环中的测试
下一篇: MD5值相同的两个不同的文件
IceMe
博客等级 码龄23年 1粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值