Пример DLL в Oxygene

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


person Frank Sidor    schedule 28.10.2009    source источник


Ответы (2)


Чтобы создать неуправляемый экспорт 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"

person Robert Love    schedule 29.10.2009
comment
Спасибо. Я создал простую библиотеку классов с одной процедурой, но когда я пытаюсь читать из приложения Delphi2010, он не может найти запись. Возможно ли это? Означает ли это, что только другие Prism2010 могут получить доступ к dll? Я хотел бы получить доступ к DLL из приложения Delphi2010 - person Frank Sidor; 30.10.2009
comment
Обновлен ответ на Показать, что я сделал для создания экспорта. - person Robert Love; 02.11.2009

Если вы хотите сделать его совместимым с delphi, вы должны указать соглашение о вызовах "stdcall".

пространство имен ClassLibrary2;

интерфейс

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

частный

защищенный

общественный

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

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

выполнение

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

начинать

System.Windows.Forms.MessageBox.Show (aMsg);

конец;

конец.

person Synoptex    schedule 13.08.2010