Delphi中错误信息对照表
- 格式:doc
- 大小:74.00 KB
- 文档页数:20
Access Violation(非法访问)错误的解决方法Access Violation(非法访问),General Protection Fault(一般保护性错误)或者Invalid Page Fault(无效页面错误),虽然说法不一样,但本质上总是由同一种错误引起的。
Access Violation常常在计算机用户运行的程序试图存取未被指定使用的存储区时遇到。
Access violation at address <十六进制值>in module <应用程序名>Read of address <十六进制值>Windows用户可能经常会看到类似于错误提示:“Error:Access violation at address 836556F8(004096da). Read of address 836556F8(00401000)”。
作为一个Delphi程序开发者,遇到这种错误的机会比其他用户更多(^_^)。
一旦Windows要在它被分配的存储区之外写数据信息,它就会覆盖其他程序甚至操作系统的命令或数据。
一旦发生了这种情况,操作系统将会瘫痪或者以某种形式关闭,你必须重新启动计算机。
例如,在Windows NT/2000下一个程序遇到这种错误时,Dr. Watson出现并且停止了该程序,捕获了一些快速的细节状态,再把它们用文本形式记录下来。
Access Violation是某些最令人气恼的Windows程序遇到的错误之一。
本文的目的就是让你找到Delphi中Access Violation的解决之道。
首先声明一点,Access Violation和Microsoft Access没有任何关系。
用Delphi开发程序时,我们可以把遇到的Access Violation分成两大类:运行期和设计期。
一、设计期的Access Violation1.硬件原因在启动或关闭Delphi IDE以及编译一个Delphi工程时容易出现设计期的Access Violation。
delphi2007手册一、简介本手册旨在为使用Delphi 2007软件的开发者提供全面的指南和参考。
本手册涵盖了Delphi 2007的各个方面,包括其功能、使用方法、开发技巧和常见问题解决方案。
通过阅读本手册,您将能够更好地了解Delphi 2007,并有效地利用该软件进行软件开发。
Delphi 2007是一款由Embarcadero公司开发的集成开发环境(IDE),适用于Windows操作系统。
该软件提供了丰富的开发工具和功能,使开发者能够快速、高效地构建Windows应用程序。
三、安装与配置1. 下载并安装Delphi 2007软件。
2. 配置开发环境,包括设置工作目录、创建项目等。
3. 熟悉Delphi 2007的界面布局。
四、基本操作1. 创建新的Delphi 2007项目。
2. 编写代码并进行调试。
3. 运行和测试应用程序。
4. 生成和部署应用程序。
五、常用功能介绍1. 数据库开发:使用Delphi 2007进行数据库连接、查询、更新等操作。
2. 图形用户界面(GUI):创建各种类型的窗口和控件。
3. 多线程编程:了解Delphi 2007中的多线程支持,以及如何使用线程进行高效开发。
4. 文件操作:掌握Delphi 2007中文件读写、路径处理等操作。
5. 网络编程:使用Delphi 2007进行网络通信,包括TCP/IP、UDP等协议。
六、进阶技巧1. 使用Delphi 2007的调试工具进行代码优化和调试。
2. 使用代码片段和模板提高开发效率。
3. 学习使用Delphi 2007的第三方组件和库,以扩展开发功能。
4. 掌握版本控制工具(如Git)的使用,以管理代码版本和协作开发。
七、常见问题解答列举在Delphi 2007开发过程中可能遇到的问题,并提供解决方案。
八、附录1. Delphi 2007软件安装包下载地址。
2. Delphi 2007常见快捷键一览表。
3. Delphi 2007常见错误信息及解决方法。
delphi olevariant 判断如何在Delphi中使用OLEVariant进行类型判断在Delphi中,OLEVariant是一种特殊的数据类型,用于在不同类型之间进行转换和操作。
在某些情况下,我们可能需要判断OLEVariant的具体类型,以便执行相应的操作。
本文将介绍如何使用Delphi的OLEVariant 进行类型判断。
在Delphi中,OLEVariant类型是一种动态变量类型,可以包含来自不同COM服务器的数据。
它可以自动进行类型转换,以适应所需的操作。
为了使用OLEVariant进行类型判断,我们需要使用VarType函数。
VarType函数返回OLEVariant变量的具体类型。
它返回一个整数值,该值表示变量的类型代码。
我们可以使用该类型代码来判断变量的具体类型。
以下是一些常见的类型代码及其对应的类型:1. varEmpty:空变量2. varNull:Null变量3. varSmallint:16位整数4. varInteger:32位整数5. varSingle:单精度浮点数6. varDouble:双精度浮点数7. varCurrency:货币类型8. varDate:日期类型9. varOleStr:字符串类型10. varBoolean:布尔类型11. varUnknown:未知类型12. varDispatch:派发类型13. varError:错误类型为了演示如何使用VarType进行类型判断,让我们考虑一个简单的示例。
假设我们有一个OLEVariant变量V,我们想要判断它是什么类型。
varV: OLEVariant;初始化VV := 123;使用VarType判断类型case VarType(V) ofvarSmallint, varInteger:ShowMessage('整数');varSingle, varDouble:ShowMessage('浮点数');varDate:ShowMessage('日期');varOleStr, varString:ShowMessage('字符串');varBoolean:ShowMessage('布尔值');elseShowMessage('未知类型');end;在上面的示例中,我们定义了一个OLEVariant变量V并将其初始化为整数值123。
"Exited with code 9009" 是一个错误信息,通常在 Delphi 编译过程中出现。
这表示 Delphi 编译器在尝试编译代码时遇到了问题,导致编译过程提前终止。
错误代码 9009 是一个特定的退出代码,用于指示 Delphi 编译器遇到了一个错误或异常情况。
这可能是由于多种原因,例如:
1.代码中存在语法错误:例如,拼写错误、丢失分号、括号不匹配等。
2.使用了不支持的 Delphi 语言特性或库。
3.项目设置或环境配置不正确。
4.Delphi 编译器本身的问题或 bug。
为了解决这个问题,你可以尝试以下方法:
1.检查代码中的语法错误,确保代码是正确的。
2.检查项目设置和环境配置,确保一切都设置正确。
3.更新 Delphi 编译器到最新版本,或尝试使用其他版本的 Delphi。
4.在网上搜索错误代码 9009,看看是否有其他开发者遇到了同样的问题,并
找到了解决方案。
5.如果问题仍然存在,你可以尝试联系 Delphi 的技术支持或社区,寻求帮助
和指导。
异常和错误处理(基于Delphi/VCL)有人在看了我的“如何将界面代码和功能代码分离(基于Delphi/VCL)”之后,提到一个问题,就是如何对服务端的类的错误进行处理。
在基于函数的结构中,我们一般使用函数返回值来标明函数是否成功执行,并给出错误类型等信息。
于是就会有如下形式的代码:RetVal := SomeFunctionToOpenFile();if RetVal = E_SUCCESSED then......else if RetVal = E_FILENOTFOUND then......else if RetVal = E_FILEFORMATERR then......else then......使用返回错误代码的方法是非常普遍的,但是使用这样的方法存在2个问题:1、造成冗长、繁杂的分支结构(大量的if或case语句),使得控制流程变得复杂2、可能会有没有被处理的错误(函数调用者如果不判断返回值的话)而异常是对于错误处理的面向对象的解决方案。
它可以报告错误,但需要知道的是,并非由于错误而引发了异常,而仅仅是因为使用了raise。
在Object Pascal中,抛出异常使用的是raise保留字。
在任何时候(即使没有错误发生),raise都将会导致异常的发生。
异常可以使得代码从异常发生处立刻返回,从而保护其下面的敏感代码不会得到执行。
通过异常从函数返回和正常从函数返回(执行到函数末尾或执行了Exit)对于抛出异常的函数本身来说是没有什么区别的。
区别在于调用者处,通过异常返回后,执行权会被调用者的try...e xcept块所捕获(如果它们存在的话)。
如果调用者处没有try...except块的话,将不会继续执行后续语句,而是返回更上层的调用者,直至找到能够处理该异常的try...except块。
异常被处理后,将继续执行try...except块之后的语句,控制权就被留在了处理异常的这一层。
关于delphi软件运⾏出现Invalidfloatingpointoperation的错。
关于delphi软件运⾏出现Invalid floating point operation的错误的解决办法关于delphi软件运⾏出现Invalid floating point operation的错误的解决办法软件如果有webbrowser载⼊⽹页的时候经常会出现这个错误。
这个错误是webbrowser3个Bug之⼀。
具体⾏程的原因⼤概我也不知道。
基本是如果XP系统编译的,放到vista或者V7就容易出现这个错误。
具体解决的办法也是很简单的。
查看官⽅的解决办法如下。
When running floating point code, such as that found in Direct 3D, you will often get a series of floating point exceptions. Microsoft supporesses these exceptions by default, but we raise them. It is easy t Here is how to turn them off in C++Builder:#include float.h__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner){_control87(MCW_EM, MCW_EM);}Here is how to turn them off in Delphi:constMCW_EM = DWord($133f);beginSet8087CW(MCW_EM);end;这是官⽅解决⽅案,⼤体的意思就是加上两句代码。
具体家在哪⾥我说明⼀下。
constMCW_EM = DWord($133f); 这⼀句是定义的常量,当然是写在定义常量的地⽅。
在Delphi 中,ERangeError是一个常见的运行时错误,表示访问数组、集合或列表时,使用的索引超出了其有效范围。
具体来说,当你尝试访问一个不存在的元素时,就会发生这种错误。
例如,考虑以下代码:
delphi复制代码
var
MyList: TArray<string>;
begin
MyList := ['Apple', 'Banana', 'Cherry'];
ShowMessage(MyList[3]); // 这里将触发 ERangeError,因为 MyList 只有
3 个元素,有效的索引是 0, 1, 和 2
end;
在上面的代码中,我们尝试访问MyList的第4个元素(索引为3),但实际上MyList只有3个元素。
因此,当尝试访问不存在的第4个元素时,Delphi 就会抛出ERangeError。
为了解决这个问题,你需要确保你访问的索引在有效范围内。
你可以通过检查数组或列表的长度或大小来做到这一点。
例如:
delphi复制代码
if Length(MyList) > Index && MyList[Index] <> nil then
ShowMessage(MyList[Index])
else
ShowMessage('Index out of range');
在上面的代码中,我们首先检查索引是否在有效范围内,然后再尝试访问该索引的元素。
如果索引超出范围,我们则显示一个消息。
delphi 中的MessageDlgif MessageDlg('Welcome to my Delphi application. Exit now?', mtConfirmation, [mbYes, mbNo], 0) = mrYes thenbeginClose;end;MessageDlg用法对话框类型:mtwarning——含有感叹号的警告对话框mterror——含有红色叉符号的错误对话框mtinformation——含有蓝色i符号的信息对话框mtconfirmation——含有绿色问号的确认对话框mtcustom——不含图标的一般对话框,对话框的标题是程序的名称按钮组中的按钮:mbYes——mrYes或6mbNo——mrNo或7mbOk——mrOk或1mbCancel——mrCancel或2mbHelp——help按钮mbAbort——mrAbort或3mbRetry——mrRetry或4mbIgnore——mrIgnore或5mbAll——mrAll或8mbNoToAll——9mbYesToAll——10procedure TForm1.Button1Click(Sender: TObject);varS:string;beginif MessageDlg('提示框',mtInformation,[mbok,mbyes],0)=mryes then messagebeep(MB_ICONEXCLAMATION);end;TMsgDlgType = (mtWarning, mtError, mtInformation, mtConfirmation, mtCustom);TMsgDlgBtn = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore,mbAll, mbNoToAll, mbYesToAll, mbHelp);constmrNone = 0;mrOk = idOk;mrCancel = idCancel;mrAbort = idAbort;mrRetry = idRetry;mrIgnore = idIgnore;mrYes = idYes;mrNo = idNo;mrAll = mrNo + 1;mrNoToAll = mrAll + 1;mrYesToAll = mrNoToAll + 1;MessageDlg()信息的汉化Delphi中的常量都放在consts.pas中,修改它可以达到汉化的目的.如: MessageDlg()显示的窗口标题及其中的按钮标题都是英文,虽然不影响使用,但在一个中文软件中总显得有些不协调. 为此在consts.pas中查找以下内容:"SMsgDlgWarning"把SMsgDlgWarning = 'Warning';SMsgDlgError = 'Error';SMsgDlgInformation = 'Information';SMsgDlgConfirm = 'Confirm';SMsgDlgYes = '&Yes';SMsgDlgNo = '&No';SMsgDlgOK = 'OK';SMsgDlgCancel = 'Cancel';SMsgDlgHelp = '&Help';SMsgDlgHelpNone = 'No help available';SMsgDlgHelpHelp = 'Help';SMsgDlgAbort = '&Abort';SMsgDlgRetry = '&Retry';SMsgDlgIgnore = '&Ignore';SMsgDlgAll = '&All';SMsgDlgNoToAll = 'N&o to All';SMsgDlgYesToAll = 'Yes to &All';改成SMsgDlgWarning = '警告';SMsgDlgError = '错误';SMsgDlgInformation = '提示'; SMsgDlgConfirm = '确认';SMsgDlgYes = '是(&Y)';SMsgDlgNo = '不(&N)';SMsgDlgOK = '确定';SMsgDlgCancel = '取消';SMsgDlgHelp = '帮助(&H)'; SMsgDlgHelpNone = '没有该帮助信息'; SMsgDlgHelpHelp = '帮助';SMsgDlgAbort = '放弃(&A)';SMsgDlgRetry = '重试(&R)';SMsgDlgIgnore = '忽略(&I)';SMsgDlgAll = '全部(&A)';SMsgDlgNoToAll = '全都不(&O)'; SMsgDlgYesToAll = '全都是(&A)';然后重新编译Consts.pas,把Consts.duc拷到delphi的lib和slib子目录下,就一劳永逸啦!。
Delphi中错误信息对照表 '''' not previously declared as a PROPERTY 前面没有说明PROPERTY ''GOTO '' leads into or out of TRY statement GOTO 进入或超出TRY语句的范围 clause expected, but found 要求子句,但出现 16-Bit fixup encountered in object file '''' 在对象文件遇到16位修复 486/487 instructions not enabled 不能用486/487指令 Abstract methods must be virtual or dynamic 抽象方法必须为虚拟的或动态的 Array type required 需要数组类型 Assignment to FOR-Loop variable '''' 给FOR循环变量赋值 Bad argument type in variable type array constructor 在变量类型数组结构中不正确的参数类型 Bad file format '''' 错误的文件格式 Bad file format: 错误的文件格式 Bad global symbol definition: '''' in object file '''' 对象文件''''中错误的全局符号定义'''' Bad unit format: 错误的单元格式 BREAK or CONTINUE outside of loop BREAK或CONTINUE超出循环 Cannot add or subtract relocatable symbols 不能增加或减少可重置的符号 Cannot assign to a read-only property 不能指定只读属性 Cannot BREAK, CONTINUE or EXIT out of a FINALLY clause 超出FINALLY子句的范围,不能使用BREAK,CONTINUE或EXIT语句 Cannot initialize local variables 不能初始化局部变量 Cannot initialize multiple variables 不能初始化多个变量 Cannot initialize thread local variables 不能初始化线程局部变量 Cannot override a static method 不能覆盖静态方法 Cannot read a write-only property 不能读取只写属性 Case label outside of range of case expression CASE标号超出了CASE表达式的范围 Circular unit reference to 对单元循环引用 Class already has a default property 类已具有默认的属性 Class does not have a default property 类没有默认的属性 Class or object types only allowed in type section 在类型区段只允许有类或对象类型 Class type required 需要类类型 Close error on 文件关闭错误 Compile terminated by user 用户中止编译 Constant expected 要求常量 Constant expression expected 要求常量表达式 Constant expression violates subrange bounds 常量表达式超出子界范围 Constant object cannot be passed as var parameter 常量对象不能作为变量参数传递 Constant or type identifier expected 要求常量或类型标识符 Constants cannot be used as open array arguments 常量不能用作打开数组参数 Constructing instance of '''' containing abstract methods 构造的实体包含抽象的方法 Could not compile used unit '''' 不能用单元编译 Could not create output file 不能建立输出文件 Could not load RLINK32.DLL 不能加载RLINK32.DLL Data type too large: exceeds 2 GB 数据类型太大:超过2GB Declaration of differs from previous declaration 的说明与先前的说明不同 Default property must be an array property 默认的属性必须为数组属性 Default values must be of ordinal, pointer or small set type 默认的值必须为序数、指针或小集类型 Destination cannot be assigned to 目标不能指定 Destination is inaccessible 目标不能存取 Dispid '''' already used by '''' DISPID标识号已被使用 Dispid clause only allowed in OLE automation section DISPID子句只能在OLE自动区段中使用 Division by zero 除数为零 Duplicate case label CASE标号重复 Duplicate tag value 重复的标志值 Dynamic method or message handler not allowed here 这里不允许有动态方法或信息处理程序 Dynamic methods and message handlers not allowed in OLE automation section在OLE自动区段不允许有动态方法或消息处理程序 Element 0 inaccessible - use ''Length'' or ''SetLength'' 元素0不能存取-使用LENGTH或SETLENGTH Error in numeric constant 数值常量错误 EXCEPT or FINALLY expected 要求EXCEPT或FINALLY EXPORTS allowed only at global scope EXPORTS只允许在全局范围使用 Expression has no value 表达式没有值 Expression too complicated 表达式太复杂 Field definition not allowed in OLE automation section 在OLE自动区段中不允许域定义 Field definition not allowed after methods or properties 在方法或属性后不允许域定义 Field or method identifier expected 要求域或方法标识符 File not found: 文件没有找到 File type not allowed here 这儿不允许文件类型 For loop control variable must be simple local variable FOR循环控制变量必须为简单局部变量 For loop control variable must have ordinal type FOR循环控制变量必须为序数类型 FOR or WHILE loop executes zero times - deleted FOR或WHILE循环执行零次-删除 FOR-Loop variable '''' cannot be passed as var parameter FOR循环变量不能作为参数传递 FOR-Loop variable '''' may be undefined after loop 在循环后的FOR循环变量是不确定的 Function needs result type 函数需要结果类型 Identifier redeclared: '''' 标识符重复说明 Illegal character in input file: '''' ($) 在输入文件中的非法字符'''' Illegal message method index 非法的消息方法指针 Illegal reference to symbol '''' in object file '''' 在对象文件中对符号的非法引用 Illegal type in OLE automation section: '''' 在OLE自动区段中的非法类型 Illegal type in Read/Readln statement 在Read/Readln语句中的非法类型 Illegal type in Write/Writeln statement 在Write/Writeln语句中的非法类型 Inaccessible value 不可存取的值 Incompatible types: '''' and '''' 不兼容的类型和 Incompatible types: 不兼容的类型 Inline assembler stack overflow 内联汇编溢出 Inline assembler syntax error 内联汇编语法错误 Instance variable '''' inaccessible here 实体变量在这里不能存取 Integer constant or variable name expected 要求整形常量或变量名 Integer constant too large 整型常量太大 Internal error: 内部错误 Invalid combination of opcode and operands 操作码与操作对象的无效组合 Invalid compiler directive: '''' 无效的编译指令 Invalid function result type 无效的函数值类型 Invalid message parameter list 无效的消息参数列表 Invalid register combination 无效的寄存器组合 Invalid typecast 无效的TYPECASE