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接口定义:
在.Net工程项目中添加引用,找到Delphi项目输出目录下的ActiveXLib.dll文件,debug目录自动Interop.ActiveXLib.dll文件,如下图:
运行程序,点Call COM Object按钮,效果图如下:
参考文章:
Delphi & C# Source 下载:
扫一扫加作者微信
测试内容:
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;
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.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工程项目中添加引用,找到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
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 下载:
扫一扫加作者微信
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网