Как импортировать DLL в delphi-призму?

Я пытаюсь импортировать DLL в моей программе Delphi-Prism и никогда не делал этого раньше. Итак, после того, как я нашел ответ в Интернете, я собрал что-то, как указано ниже, но не работает.

  MyUtils = public static class
  private
    [DllImport("winmm.dll", CharSet := CharSet.Auto)]
    method timeBeginPeriod(period:Integer):Integer; external;
  protected
  public
    constructor;
  end;

Вот как я это использую:

var tt := new MyUtils;
tt.timeBeginPeriod(1);

Когда я запускаю свою программу, я продолжаю получать следующие ошибки.

  • "MyUtils" не предоставляет доступного конструктора.
  • "System.Object" не содержит определения "timeBeginPeriod" в выражении "tt.timeBeginPeriod."

Что я делаю неправильно? Как вы импортируете DLL в Delphi-Prism?

Я следовал за этим вопросом о переполнении стека - Delphi Prism получает неизвестный идентификатор "DllImport", ошибка

2 ответа

Решение

Ты очень близко

Вам не нужен конструктор, поэтому вы можете удалить его:

MyUtils = public static class
private
  [DllImport("winmm.dll", CharSet := CharSet.Auto)]
  method timeBeginPeriod(period:Integer):Integer; external;
protected
public
end;

Если вы звоните timeBeginPeriod Функция извне блока, где он объявлен, вам нужно изменить его видимость на public,

Вам также не нужно создавать экземпляр для вызова функции:

MyUtils.timeBeginPeriod(1);

Я проверил это с приложением, которое объявил и использовал SendMessage вместо этого, чтобы я мог легко проверить, чтобы убедиться, что это на самом деле работает (я послал EM_SETTEXT сообщение для элемента управления Edit в той же форме).

  MyUtils = public static class
  public
    [DllImport("winmm.dll", CharSet := CharSet.Auto)]
    class method timeBeginPeriod(period:Integer):Integer; external;
  end;


MyUtils.timeBeginPeriod(1);
Другие вопросы по тегам