C#.Net 调用Delphi 编译的ActiveX COM组件(原)

  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);
var I: ICSFramework_Delphi_COM;
begin
  I := CoCSFramework_Delphi_COM.Create();
  ShowMessage(VarToStr(I.Calc(100, 999))); {传入double类型的参数}
  I := nil;
end;

procedure TForm1.Button3Click(Sender: TObject);
var I: ICSFramework_Delphi_COM;
var v: OleVariant;
begin
  I := CoCSFramework_Delphi_COM.Create();
  v := I;
  ShowMessage(I.TestObject(v)); {向COM对象传入对象引用,参数类型:OleVariant}
  I := nil;
end;

procedure TForm1.Button4Click(Sender: TObject);
var I: ICSFramework_Delphi_COM;
var V: OleVariant;
begin
  I := CoCSFramework_Delphi_COM.Create();
  I.ShowFormWithParam(PChar('Delphi内部调用COM对象并显示窗体和传递参数!'),V);
  ShowMessage(VarToStr(V));
  I := nil;
end;


C#.Net环境下调用Delphi编译的ActiveX COM组件

.Net环境下调用ActiveX组件很简单,找到dll,ocx文件添加引用会自动生成RCW程序集Interop.XXX.dll 文件。
在.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/S框架网|原创精神.创造价值.打造精品


扫一扫加作者微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务


版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
上一篇:C#.Net COM交操作性 - 强类型RCW和弱类型CCW详解
下一篇:Winform C/S结构开发框架客户机部署DevExpress DLL库
评论列表

发表评论

评论内容
昵称:
关联文章

C#.Net 调用Delphi 编译ActiveX COM()
Delphi程序调用C#.Net编译DLL并打开窗体(详解)
C#调用Delphi编译DLL函数库返回大文本数据
C#调用C++编译DLL详解
什么是COM,COM对象,COM标准?
Delphi封装Novell LDAP底层API, 提供给C#.Net开发
C#代码Excel读取器(不需要Office Excel Com
C# 动态编译调用WebService方法
标签:C#.Net开发 - 自定义设计器持久化对象属性
标签:C#.Net开发 - 自定义属性编辑器持久化对象属性
C#.Net开发 - 设计时使用自定义属性编辑器持久化对象
Dev表格RepositoryItemLookUpEdit改变值时设置其它列值-
C#.Net开发(高级篇) - 开发复杂设计时组件编辑器
创】C# Winform Dev自动下拉弹框筛选数据PopupContainerEdit
C#.Net同名方法重载调用顺序
Winform C/S框架 - FastReport.NET下载
标签:C#.Net开发 - 自定义设计器(ComponentDesigner)
C#.Net开发(高级篇) - 设计时在窗体设计器文件内生成组件代码
标签:C#.Net开发 - 设计时持久化对象数组
标签:C#.Net开发 - 属性窗体内显示自定义名称