Delphi调用C#类库来自:luyuan@ 绿源膳食 日期:2008-3-22 17:32:08 全文阅读:161 分类:IT 技术【摘要】 最近要做一个东西, 将几个程序的数据组合在一起进行输出, 以前的程序有用 Delphi 写的,有用.Net 写的, 都是没有存数据库的, 考虑再三, 决定做用C#做一个DLL, 专门用于操作数据库, 其它的程序调用这个DLL将数据存入数据库. 于是引出问题, Dephi 与 .Net 的互操作问题, 特写了下面的小程序测试Delphi 调用C#写的DLL. 【全文】最近要做一个东西, 将几个程序的数据组合在一起进行输出, 以前的程序有用 Delphi 写的,有用.Net 写的, 都是没有存数据库的, 考虑再三, 决定做用C#做一个DLL, 专门用于操作数据库, 其它的程序调用这个DLL将数据存入数据库. 于是引出问题, Dephi 与 .Net 的互操作问题, 特写了下面的小程序测试Delphi 调用C#写的DLL. 一.创建C#类库 public interface ICalc { int CalcSum(int a, int b);
}public class CCalc : ICalc { public int CalcSum(int a, int b) { return a + b;
}}编译成类库1. 用 VS.Net 开发工具;
注:用 VS.Net生成的类库在注册时,弹出”由于没有注册的类型,不能生成注册脚本”。不知什么原因, 有知道的朋友请告知。2. 用命令行Csc.exe /t:library /out
otNet2Com.dll Icalc.cs Ccalc.cs二.DotNet 类库打包成COM类型库Tlbexp.exedo
tnet2com.dll /out:dotnet2com.tlb三.注册COM类型库Regasm.exedo
tNet2Com.dll注意:这里是注册DotNet 生成的类库,而不是tlb 文件。可以先注册成一个 reg 文件, 再导入到注册表.Regasm.exedo
tnet2com.dll /regfile:do
tnet2com.reg四.Delphi导入类型库Delpi 中, Project -> Import Type Library ,选中类型库:dotnet2com.tlb,生成do
tNet2Com_TLB 单元文件。单元文件中有接口 Icalc。 ICalc = interface(IDispatch) ['{2AE7BB2E-F24D-391F-BDD2-2C92C39629BF}'] function CalcSum(a: Integer;
b: Integer): Integer;
safecall;
end;
和代理类声明 TCCalc 及获得 Icalc 接口的属性: property DefaultInterface: _CCalc read GetDefaultInterface;
五.Delphi 中使用 usesdo
tNet2Com_TLB;
{$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);var result : integer;
c: TCCalc;
begin
c:= TCCalc.Create(self);
result:= (c.DefaultInterface as ICalc).CalcSum(1,2);
self.Edit3.Text := InttoStr(result);
end;