簡體   English   中英

DialogBoxParam在64位平台上不起作用

[英]DialogBoxParam didn't work on 64-bit platform

我正在將代碼移植到64位平台上,但DialogBoxParam出現問題。它在32位平台上工作正常,但在64位平台上工作不正常。

DialogBoxParam(Hinstance,MAKEINTRESOURCE(DLG_INPUTBOX),owner,@DialogProc,NativeInt(@info))

DLG_INPUTBOX來自資源文件

單位resource_gui;

接口

CONST
  DLG_INPUTBOX = 8810;

  DLG_PROGRESS = 8800;

  DLG_AREYOUSURE = 8809;

  BITMPAT_UNCHECKED = 8804;

  BITMPAT_CHECKED = 8805;
{$R DLGRES.res}

這是dialogpro

  function DialogProc(hwndDlg:HWND;uMsg:UINT ;wParam:WPARAM ;lParam:LPARAM ):NativeInt;stdcall;
  var
    info:Pinfo;
    OldEditValue:String;
    CanClose:boolean;
  begin
    Result := EIINT(0);
    case uMsg of
      WM_INITDIALOG:begin
        setWindowLong(hwndDlg,GWL_USERDATA,lParam);
      end;
      WM_SHOWWINDOW:begin
      .......

我在WM_INITDIALOG代碼塊中設置了一個斷點,但是它沒有出現

看看是否有幫助:

DialogBoxParam-可在Win32中使用,但不能

我將代碼更改為64位,並遇到了DialogBox Procedures。 我對DialogBoxParam進行的初始化對話框的調用將不再以64位編譯,因此我將過程從返回BOOL更改為返回INT_PTR。

現在,當我運行代碼時,對話框永遠不會顯示。 我在DialogBox Procedure中放置一個斷點,它得到:

WM_SETFONT WM_DESTROY WM_NCDESTROY

消息順序。 我再也沒有收到WM_INITDIALOG消息了!

我對DialogBoxParam的調用返回-1,而GetLastError返回0

我今天有完全一樣的問題。 我發現清單文件具有錯誤的處理器架構。

processorArchitecture =“ x86”

代替

processorArchitecture =“ amd64”

修復該問題后,該對話框將按預期方式彈出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM