Delphi程序调用C#.Net编译的DLL并打开窗体(详解)
最近用C#.Net写了一个公用模块, 本觉得仅提供给.Net程序使用, 可是领导要求把这些功能提供给旧系统使用, 天啦, 几套旧系统全是Delphi写的, 我不想再重复写一次,因而尝试编译成COM组件提供给Delphi调用.花了一下午研究技术, 结果很满意, 调试经过, 特分享受出来给你们学习.
实现步骤:
一、生成密钥文件用于给程序集强名称签名(必须)
sn -k MyKey.snk 框架
二、使用强名称签名的Key编译成类库Tester.DLL
csc /t:library /keyfile:MyKey.snk Tester.cs
学习
三、生成类型库 (此tlb文件提供给Delphi导入, 使用OLE方式调用此步可省略了)
tlbexp Tester.dll /out:Tester.tlb
四、生成注册DLL的注册表文件
regasm Tester.DLL /regfile:Tester.reg
五、运行Tester.reg
将上面四个步骤打包成一个BAT文件自动生成DLL, 在运行Delphi程序前请先运行Tester.reg注册COM.
打包Installer,Setup.exe 别忘记打包第5步.测试
且看运行效果:
Delphi程序Project1.exe (图片中英文拼写错误,不想改了,sorry!)
点Call DLL按钮成功打开.Net窗体,测试经过!
注意: 开发环境中必须在Visual Studio 2008命令提示中运行reg.bat!!! 以下图:
两种可能的错误提示及解决方案:
1. 出现如下提示说明没有注册COM组件, 请运行Tester.reg.
2. 出现如下提示说明您调用了一个没有签名的.Net方法(无参方法)
spa
//Test a function with signature.
ResultValue := OBJ.GetMyName('HELLO!C/S框架网 www.csframework.com');
ShowMessage(ResultValue);调试
ResultValue := OBJ.GetMyAge('JONNY!');
ShowMessage(ResultValue);code
ResultValue := OBJ.GetMyKey(0);
ShowMessage(ResultValue);orm
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;blog
end;图片
源码在360云盘
开发