易語言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名稱空間。
示例代碼下載地址:
(1) http://file.yiyuen.com/file/download/245873
(2) https://github.com/CingZeoi/storage/raw/main/code/易語言DLL和C%23.Net類庫互相調用.zip
