Пример DLL в Oxygene - PullRequest
       42

Пример DLL в Oxygene

0 голосов
/ 28 октября 2009

Может кто-нибудь сказать мне, где найти пример того, как сделать DLL (WindowsControlLibrary) в Oxygene для .NET?
В старом Delphi вы делаете раздел экспорта.

Ответы [ 2 ]

2 голосов
/ 29 октября 2009

Чтобы создать неуправляемый экспорт DLL с помощью Delphi Prism и вызвать его с Delphi 2010, необходимо сделать следующее:

В Delphi Prism:

  1. Файл | Новый | Проект
  2. В левом дереве выберите Delphi Prism
  3. Выбор библиотеки классов Windows

Нажмите ОК.

Это создаст шаблон для библиотеки классов Windows

Щелкните правой кнопкой мыши по проекту «ClassLibraryX» и выберите «Свойства»:

  1. В разделе «Совместимость» выберите «Разрешить небезопасный код»
  2. В разделе «Сборка» найдите общий раздел и измените тип процессора на «x86»
  3. Щелкните правой кнопкой мыши на созданной вкладке «ClassLibraryX» и выберите «Сохранить выбранные элементы»

Это настраивает проект для поддержки UnmanagedExportAttribute .

Тогда в коде вам нужно будет создать метод класса. В приведенном ниже примере я добавил ссылку на System.Windows.Forms.

namespace ClassLibrary2;

interface

type
  Class1 = public class
  private
  protected
  public
    [UnmanagedExport('ShowMessage')]
    class method ShowMessage(aMsg : String);
  end;

implementation

class method Class1.ShowMessage(aMsg : String);
begin
 System.Windows.Forms.MessageBox.Show(aMsg);  
end;

end.

Используя PEViewer, я использовал тот, который поставляется в качестве примера в JCL , вы должны увидеть новый экспорт. В приведенном выше примере "ShowMessage"

1 голос
/ 13 августа 2010

Если вы хотите сделать его совместимым с delphi, вам нужно указать «stdcall» Calling Convention

namespace ClassLibrary2;

интерфейс

Тип Class1 = публичный класс

частный

защищено

публично

[UnmanagedExport ('ShowMessage'), System.Runtime.InteropServices.CallingConvention.StdCall]

метод класса ShowMessage (aMsg: String); конец;

реализация

метод класса Class1.ShowMessage (aMsg: String);

начать

System.Windows.Forms.MessageBox.Show (АМСГ);

конец;

конец.

...