Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > ChangeDisplaySettingsEx нужно передать nil


Автор: Ak47black 21.7.2007, 04:04
Здравствуйте.
Вообщем у меня такая ситуация тут и я хочю посоветоваться как тут лучше.
Есть функция ChangeDisplaySettingsEx и она принимает следующие  параметры.
Код

LONG ChangeDisplaySettingsEx(
  LPCTSTR lpszDeviceName,
  LPDEVMODE lpDevMode,
  HWND hwnd,
  DWORD dwflags,
  LPVOID lParam
);

Мне нужно в параметр 
Код

LPDEVMODE lpDevMode,

передать nil
Такое можно сделать, тут даже написано в Msdn
Цитата

If lpDevMode is NULL, ChangeDisplaySettingsEx uses all of the values currently in the registry for the display setting.

Но если я просто подставляю nil в Delphi, я вижу 
Цитата

Types of actual and formal var parameters must be identical

Как мне тут правильно сделать чтобы не было ошибки и тем временем нормально работало?

Автор: dumb 21.7.2007, 04:39
синтаксис дельфи особо не знаю.. я б сделал как-нибудь так:
Код

...
interface
...
{$EXTERNALSYM ChangeDisplaySettingsEx}
function ChangeDisplaySettingsEx(lpszDeviceName: PChar; lpDevMode: PDeviceMode; // <--
        wnd: HWND; dwFlags: DWORD; lParam: Pointer): Longint; stdcall;

implementation

function ChangeDisplaySettingsEx; external user32 name 'ChangeDisplaySettingsExA';
...

Автор: Snowy 21.7.2007, 10:57
В дельфи это варовский параметр.
Поэтому передаётся не указатель, а сама структура.
Поэтому, если у тебя указатель (например nil), то нужно его разыменовать.
Код
ChangeDisplaySettingsEx('', PDeviceMode(nil)^, 0, 0, nil);

Автор: Alexeis 21.7.2007, 11:19
А еще можно переписать прототип функции, так чтобы вместо var параметра на той позиции оказалась переменная типа указатель на DeviceMode, при это ничуть не нарушиться правильность вызова.

Автор: Ak47black 22.7.2007, 17:15
Спасибо всем за ответы.
От Snowy способ, больше всего мне подошол +

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)