C#.Net 调用Delphi 编译的ActiveX COM组件(原)
作者:C/S框架网  发布日期:2011/07/28 22:15:08
  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框架网|原创作品.质量保障.竭诚为您服务


点击下载附件 点击下载附件 (如下载失败,请邮件通知我们寄回给您,或QQ:23404761留言.)
上一篇 下一篇