美文网首页
Delphi调用C#编写的DLL库

Delphi调用C#编写的DLL库

作者: 大龙10 | 来源:发表于2022-05-27 06:52 被阅读0次

一、参考资料

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

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

  • 编写C#dll的方法都一样,首先在vs2005中创建一个“类库”项目

  • 完成之后,选中该项目右击,选择属性,然后在应用程序中选择程序集信息如图:


  • 将图中红框的地方选中,然后


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

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

  • 1、生成密钥文件用于给程序集强名称签名(必须)
    sn -k MyKey.snk
  • 2、使用强名称签名的Key编译成类库Tester.DLL
    csc /t:library /keyfile:MyKey.snk Tester.cs
  • 3、生成类型库 (此tlb文件提供给Delphi导入, 使用OLE方式调用此步可省略了)
    tlbexp Tester.dll /out:Tester.tlb
  • 4、生成注册DLL的注册表文件
    regasm Tester.DLL /regfile:Tester.reg
  • 5、运行Tester.reg

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.

五、结果

相关文章

网友评论

      本文标题:Delphi调用C#编写的DLL库

      本文链接:https://www.haomeiwen.com/subject/vktyprtx.html