-1

GetProcessDPIAwarenessWindows 8.1 SDK から移植しようとしています。ただし、このプログラムを起動しようとすると、次のエラーでクラッシュします。

system exception (code 0xc0000409) at 0x77929990'

関数は にありshcore.dllます。私は実行しているWindows 8.1ので動作するはずですが、動作しません。

program Test;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  Winapi.Windows;

const
  shcore = 'shcore.dll';

type
  HANDLE = THandle;

  PROCESS_DPI_AWARENESS = (
    PROCESS_DPI_UNAWARE = 0,
    PROCESS_SYSTEM_DPI_AWARE = 1,
    PROCESS_PER_MONITOR_DPI_AWARE = 2
  );

function GetProcessDPIAwareness(
  {_In_}  hprocess: HANDLE;
  {_Out_} out value: PROCESS_DPI_AWARENESS
): HRESULT; WINAPI; external  name 'GetProcessDPIAwareness';

var
  DPI: PROCESS_DPI_AWARENESS;
begin
  GetProcessDPIAwareness(0, DPI); // crashes here
  ReadLn;
end.
4

1 に答える 1

3

外部宣言に dll 名を追加すると、コードは実際にコンパイルされます。次に、TLama のアドバイスに従い、正しいプロシージャ名を使用するだけです。

function GetProcessDpiAwareness(
  {_In_}  hprocess: HANDLE;
  {_Out_} out value: PROCESS_DPI_AWARENESS
): HRESULT; WINAPI; external shcore;
于 2015-04-21T13:41:07.987 に答える