Delphi 为什么我的自定义组件在IDE中引发AVs?

Delphi 为什么我的自定义组件在IDE中引发AVs?,delphi,components,sdl,access-violation,Delphi,Components,Sdl,Access Violation,我正在尝试编写一个简单的组件,它允许您使用SDL1.3API在Delphi窗口上嵌入一个或多个SDL渲染曲面。它可以很好地编译和安装,但当我尝试在表单设计器中使用该组件时,每当我尝试在对象检查器中访问其属性、保存表单或删除该组件时,它都会引发AVs,并且将其放置在表单上,然后尝试运行时会出现链接器错误:无论出于何种原因,它显然无法正确读取DFM DLL可以在找到,我的组件的源代码可以下载。SDL.pas是一个JEDI-SDL头文件;剩下的是我自己的代码 我看不出有任何理由在表单设计器中使用AVs

我正在尝试编写一个简单的组件,它允许您使用SDL1.3API在Delphi窗口上嵌入一个或多个SDL渲染曲面。它可以很好地编译和安装,但当我尝试在表单设计器中使用该组件时,每当我尝试在对象检查器中访问其属性、保存表单或删除该组件时,它都会引发AVs,并且将其放置在表单上,然后尝试运行时会出现链接器错误:无论出于何种原因,它显然无法正确读取DFM

DLL可以在找到,我的组件的源代码可以下载。SDL.pas是一个JEDI-SDL头文件;剩下的是我自己的代码


我看不出有任何理由在表单设计器中使用AVs。如果在运行时动态创建控件,则不会出现任何稳定性问题。任何人都可以看看这个,并提供一些可能帮助我清理它的反馈吗?

您可以自己调试这个。打开包含组件的包项目。然后转到运行|参数并输入IDE本身作为主机应用程序。从IDE中运行IDE。然后重复您的步骤来复制AV,IDE应该会停止并向您显示失败的地方。您可以从那里使用正常的调试技术。

OK。当我从published部分删除Flags属性时,问题就消失了。当IDE试图在RTTI中查找基础集合定义时,它会阻塞。我正在运行Delphi2009,安装了所有更新。这是我在09年发现的第二例不良RTTI。我会把它放在QC里。这套是怎么申报的?集合中有多少元素?您只能发布最多只能包含32个元素的集合。TSdlWindowFlags=set of(sdlwFullscreen、sdlwOpenGl、SDLWShowed、sdlwBorderless、SDLWLResizeable、sdlwMinimized、sdlwMaximized、SDLWInputGrapped、DSLWWinputFocus、sdlwMouseFocus、sdlwForce32=31);枚举中有12个元素,经过精心设计,因此我可以将其传递给一个C例程,该例程需要一个“int”。当然,high元素从未使用过。但它并没有超出32个元素的限制。看看我的错误报告。这是一个断开连接的枚举。最后一个元素不是连续的。这可能是原因,因为RTTI不处理非连续枚举,然后从中创建集合。