一、参考资料
千里之音的博客 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.
网友评论