升级Delphi至11后调用DLL函数触发Access Violation问题排查
Delphi 11调用DLL触发Access Violation问题
背景
原基于Delphi 6开发的DLL,升级至Delphi 11后,调用其中函数时触发Access Violation错误。旧版本代码可正常运行,当前Windows 10环境下,DLL已通过Delphi 11编译(部分组件已变更),编译无报错。本人首次接触DLL开发,过往项目均为单元和窗体集成在EXE中,拥有该DLL源码及项目文件。
测试项目代码
procedure TForm1.Button1Click(Sender: TObject); type TShowUserList = function : TForm; stdcall; var LHandle: THandle; LUserList : TShowUserList; LForm : TForm; begin LHandle := LoadLibrary('E:\D11 Projects\Test Dll\Win32\Debug\BOUsers.Dll'); if LHandle <> 0 then begin @LUserList := GetProcAddress(LHandle, 'ShowUserList'); if @LUserList <> nil then begin LForm := LUserList; //此处触发错误,未进入ShowUserList函数 end; end; end;
DLL中相关代码
FUNCTION ShowUserList : TForm; BEGIN IF NOT G.FormExists('UsersListForm') THEN BEGIN UsersListForm := TUsersListForm.Create(Application); Result := UsersListForm; END ELSE Result := G.ReturnForm('UsersListForm'); END; EXPORTS ShowUserList;
当前问题与预期
- 调试时执行到
LForm := LUserList触发错误,LUserList显示为“inaccessible value” - 无法进入DLL代码调试(已确认调试功能默认开启)
- 预期:
LForm能获取DLL中的UserListForm,可正常显示、调试及使用
已查阅StackOverflow相关问题及Embarcadero官方示例,暂未解决。
内容的提问来源于stack exchange,提问作者TedEdGo
相关产品推荐
相关产品推荐

