超级领袖 發表於 2022-4-1 22:25:00

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

<h1 id="易语言dll与cnet互操作">易语言DLL与C#.net互操作</h1>
<p>本文演示了如何用易语言调用C#.NET编写的DLL,以及用C#调用易语言DLL并输出类。</p>
<h2 id="易语言调用-c-编写的-net-类库">易语言调用 C# 编写的 .NET 类库</h2>
<p>办法是:将C#编写的类库注册为Com组件,然后使用易语言调用。<br>
VS新建一个C# .net类库工程。修改项目属性:<br>
1.勾选 生成 -&gt; 为 COM 互操作注册 复选框<br>
2.勾选 应用程序 -&gt; 程序级信息 -&gt; 使程序集 COM 可见 复选框<br>
编写类库代码并生成DLL<br>
由于这是.net类库,必须注册com组件后才可被易语言调用,要用到"regasm.exe"工具来注册。<br>
regasm.exe通常在 ""C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe"<br>
注册方法:打开CMD输入"C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" /c "DLL所在路径"<br>
例如: "C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" /c "d:\testcom\edemo\mycom.dll"<br>
卸载注册的组件:只需把参数"/c"改为 "/u" 即可,例如:"C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" /u "d:\testcom\edemo\mycom.dll"<br>
注:需要在公开的类前声明 特性。</p>
<h2 id="c-调用易语言编写的win32dll及易语言dll公开类">C# 调用易语言编写的Win32DLL及易语言DLL公开类</h2>
<p>如果想要易语言公开类中的公开方法被从DLL中输出,必须设置以下选项:<br>
1.在易语言点选"程序-&gt;配置-&gt;其它-&gt;在编译DLL时允许输出被公开类中的公开方法"选项;<br>
2.选中所处类的"公开"属性;<br>
3.选中类方法的"公开"属性。<br>
注意: 所公开方法在所编译DLL中的输出名称被设置为"_所处类名"+"_方法名"格式,譬如公开矩形类中的公开计算面积方法被输出后的名称即为"_rectangle_CalculateArea"<br>
4.在 C# 中调用类公开方法,必须首先在C#中声明一个同DLL中所输出类具有完全相同数据成员和方法的类。<br>
5.在 C# 中声明公开类方法时,公开的类方法第一个参数固定为对象自身的指针值,在调用时使用 this 关键字获得对象自身,后续参数必须与DLL公开类的内部方法中定义的参数顺序及类型完全保持一致。<br>
C#调用Win32DLL,必须引用 System.Runtime.InteropServices名称空间。</p>
<p>示例代码下载地址:<br>
(1) http://file.yiyuen.com/file/download/245873<br>
(2) https://github.com/CingZeoi/storage/raw/main/code/易语言DLL和C%23.Net类库互相调用.zip</p>


</div>
<div id="MySignature" role="contentinfo">
    <p>知乎: @张赐荣<br>赐荣博客: www.prc.cx</p><br><br>
来源:https://www.cnblogs.com/netlog/p/16089473.html
頁: [1]
查看完整版本: 易语言DLL与C#.net互操作