易语言DLL与C#.net互操作


易语言DLL与C#.net互操作

本文演示了如何用易语言调用C#.NET编写的DLL,以及用C#调用易语言DLL并输出类。

易语言调用 C# 编写的 .NET 类库

办法是:将C#编写的类库注册为Com组件,然后使用易语言调用。
VS新建一个C# .net类库工程。修改项目属性:
1.勾选 生成 -> 为 COM 互操作注册 复选框
2.勾选 应用程序 -> 程序级信息 -> 使程序集 COM 可见 复选框
编写类库代码并生成DLL
由于这是.net类库,必须注册com组件后才可被易语言调用,要用到"regasm.exe"工具来注册。
regasm.exe通常在 ""C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe"
注册方法:打开CMD输入"C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" /c "DLL所在路径"
例如: "C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" /c "d:\testcom\edemo\mycom.dll"
卸载注册的组件:只需把参数"/c"改为 "/u" 即可,例如:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" /u "d:\testcom\edemo\mycom.dll"
注:需要在公开的类前声明 [ClassInterface(ClassInterfaceType.None)] 特性。

C# 调用易语言编写的Win32DLL及易语言DLL公开类

如果想要易语言公开类中的公开方法被从DLL中输出,必须设置以下选项:
1.在易语言点选"程序->配置->其它->在编译DLL时允许输出被公开类中的公开方法"选项;
2.选中所处类的"公开"属性;
3.选中类方法的"公开"属性。
注意: 所公开方法在所编译DLL中的输出名称被设置为"_所处类名"+"_方法名"格式,譬如公开矩形类中的公开计算面积方法被输出后的名称即为"_rectangle_CalculateArea"
4.在 C# 中调用类公开方法,必须首先在C#中声明一个同DLL中所输出类具有完全相同数据成员和方法的类。
5.在 C# 中声明公开类方法时,公开的类方法第一个参数固定为对象自身的指针值,在调用时使用 this 关键字获得对象自身,后续参数必须与DLL公开类的内部方法中定义的参数顺序及类型完全保持一致。
C#调用Win32DLL,必须引用 System.Runtime.InteropServices名称空间。

示例代码下载地址:
http://file.yiyuen.com/file/download/245873