Delphi调用C#编写的DLL库

2022-05-27  本文已影响0人  大龙10

一、参考资料

千里之音的博客 https://www.cnblogs.com/ching2009/p/6126086.html
https://www.csframework.com/archive/2/arc-2-20110408-1307.htm

二、C# “类库”项目Tester.Dll

然后在生成栏目中选中红框的为com互操作注册

三、Delphi程序调用C#.Net编译的DLL

1)将上面四个步骤打包成一个reg.BAT文件

sn -k MyKey.snk

csc /t:library /keyfile:MyKey.snk Tester.cs

tlbexp Tester.dll /out:Tester.tlb

regasm Tester.DLL /regfile:Tester.reg

2)将 debug 下的Tester.dll等文件拷贝到有 Tester.cs 的文件夹下。

3)运行reg.BAT,生成Tester.reg

在 D:\CS_Project\Tester\Tester目录下运行

4)双击注册Tester.reg

四、程序

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,ComObj;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  OBJ: Variant; //OLEVariant Type.
  ResultValue: string; //Value returned from C#
  i:Integer;//Value returned from C#
begin
  try
    try
      OBJ := CreateOleObject('Tester.Tester');
      //Test a function with signature.
      ResultValue := OBJ.GetMyName('HELLO!C/S框架网 www.csframework.com');
      ShowMessage(ResultValue);

      ResultValue := OBJ.GetMyAge('JONNY!');
      ShowMessage(ResultValue);

      ResultValue := OBJ.GetMyKey(0);
      ShowMessage(ResultValue);

      i:=OBJ.ShowMessage('Call CSharp Window....(Sender:Delphi Form)');
      ShowMessage(VarToStr(i));//Show result ID from C# function.
    except
      on e: Exception do
      begin
        ShowMessage(e.Message);
      end;
    end; 
 finally
    OBJ := Unassigned;
  end;
end;
end.

五、结果

上一篇 下一篇

猜你喜欢

热点阅读