C#.Net 调用Delphi 编译的ActiveX COM组件(原)
C#.Net 调用Delphi 编译的ActiveX COM组件(原)
测试内容: 1. 向COM组件传递double类型的参数,并返回值 2. 向COM组件传递string类型的参数,并返回值 3. 向COM组件传递Object类型的参数,并返回值 4. .Net程序调用Delphi编译的COM组件,显示窗体和传递参数 5. 使用out关键字接收COM组件返回的数据 以上内容全部测试通过。 Delphi环境下测试ActiveX COM组件 Delphi导入类型库(Import Type Library),如下图: Create Unit生成ActiveXLib_TLB.pas文件(类似.Net环境下自动生成的Interop.XXX.dll),如下图: 首先注册:regsvr32 "E:\CSFramework.Tech\Delphi_COM\bin\ActiveXLib.dll" 然后运行DelphiEXE.exe,如下图: ActiveXLib.dll COM接口定义: Pascal Code:
TCSFramework_Delphi_COM = class(TTypedComObject, ICSFramework_Delphi_COM) public function Calc(A, B: Double): Double; stdcall; function SayHello(HelloStr: PChar): PChar; stdcall; function TestObject(var AObject: OleVariant): PChar; stdcall; function ShowFormWithParam(AParam: PChar; out OutResult: OleVariant): HResult; stdcall; end;
Pascal Code:
procedure TForm1.Button1Click(Sender: TObject); var I: ICSFramework_Delphi_COM; begin I := CoCSFramework_Delphi_COM.Create(); ShowMessage(I.SayHello('Hello,CSFramework.com!')); {传入字符串PChar类型} I := nil; end; procedure TForm1.Button2Click(Sender: TObject); procedure TForm1.Button3Click(Sender: TObject); procedure TForm1.Button4Click(Sender: TObject);
在.Net工程项目中添加引用,找到Delphi项目输出目录下的ActiveXLib.dll文件,debug目录自动Interop.ActiveXLib.dll文件,如下图: 运行程序,点Call COM Object按钮,效果图如下: C# Code: private void button1_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); try { //实例化COM对象 ICSFramework_Delphi_COM com = new CSFramework_Delphi_COMClass(); Object o = com as Object;//转换为对象Object //传入double类型的参数 double d = com.Calc(100, 999); sb.AppendLine(d.ToString()); //传入String类型的参数 string result = com.SayHello("Hello! CSFramework!"); sb.AppendLine(result); //传入String类型的参数 string resulx = com.TestObject(ref o); sb.AppendLine(resulx); //.Net程序调用Delphi编译的COM对象,显示窗体并传递参数,返回Out参数! object S; com.ShowFormWithParam(".Net程序调用Delphi编译的COM对象,显示窗体和传递参数!", out S); sb.AppendLine(S.ToString()); //释放COM对象的内存 Marshal.FinalReleaseComObject(com); } catch (Exception ex) { sb.AppendLine(ex.Message); } textBox1.Text = sb.ToString(); } //来源:C/S框架网(www.csframework.com) QQ:1980854898 参考文章: Delphi & C# Source 下载: 扫一扫加作者微信
参考文档:
C#调用Delphi编译的DLL函数库返回大文本数据 Delphi程序调用C#.Net编译的DLL并打开窗体(详解) C#调用C++编译的DLL详解 C#.Net 类的同名方法重载调用顺序 C#.Net COM交操作性 - 强类型RCW和弱类型CCW详解 标签:C#.Net组件开发 - 自定义设计器(ComponentDesigner) 标签:C#.Net组件开发 - 自定义设计器持久化对象的属性 标签:C#.Net组件开发 - 自定义属性编辑器持久化对象的属性 C#.Net组件开发(高级篇) - 设计时在窗体设计器文件内生成组件的代码 C#.Net组件开发(高级篇) - 自定义CollectionEditor编辑器 C#.Net组件开发(高级篇) - 开发复杂的设计时组件编辑器 C#.NET WEBAPI 接口设计与调用 C#.NET WEBAPI 接口设计-调用多个参数的接口 C#.NET短信通用接口设计-调用短信API案例|C/S框架网 C#.NET通过CodeDom.Compiler动态编译计算表达式的值
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |