美文网首页
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