0

有人能告诉我在哪里可以找到如何在 Oxygene 中为 .NET 制作 DLL(WindowsControlLibrary)的示例吗?
在旧的 Delphi 中,您创建了一个导出部分。

4

2 回答 2

2

要使用 Delphi Prism 创建非托管 DLL 导出并使用 Delphi 2010 调用它,您必须执行以下操作:

在德尔福棱镜中:

  1. 文件 | 新 | 项目
  2. 在左侧的树视图中,选择 Delphi Prism
  3. 选择 Windows 类库

按确定。

这将为 Windows 类库创建模板

右键单击项目“ClassLibraryX”并选择属性:

  1. 在兼容性下选择“允许不安全代码”
  2. 在 Build 下,找到 General 部分并将 CPU Type 更改为“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”

于 2009-10-29T00:13:31.303 回答
1

如果你想让它与 delphi 兼容,那么你必须指出一个“stdcall”调用约定

命名空间类库2;

界面

类型 Class1 = 公共类

私人的

受保护

上市

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

类方法 ShowMessage(aMsg : String); 结尾;

执行

类方法 Class1.ShowMessage(aMsg : String);

开始

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

结尾;

结尾。

于 2010-08-13T18:50:05.940 回答