You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 12:07:35