进阶教程
目录
在阅读本篇教程前,请确保你已经掌握了入门篇
开始
String
C#函数
[DllExport(CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
public static IntPtr StringFunc(IntPtr str)
{
var newStr = Marshal.PtrToStringAnsi(str);
return Marshal.StringToHGlobalAnsi($"C#:{newStr}");
}
DLL命令
.版本 2
.DLL命令 StringFunc, 文本型, "Test"
.参数 str, 文本型
调用代码
调试输出 (StringFunc (“易语言”))
输出结果
C#:易语言
示例中演示了如何接收来自易语言的字符串,并且添加新内容返回给易语言
Byte[]
C#函数
[DllImport("kernel32.dll", EntryPoint = "lstrlenA", CharSet = CharSet.Ansi)]
public extern static int LstrlenA(IntPtr ptr);
[DllExport(CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
public static IntPtr ByteFunc(IntPtr bytes)
{
var len = LstrlenA(bytes);
byte[] buffer = new byte[len];
Marshal.Copy(bytes, buffer, 0, len);
return Marshal.StringToHGlobalAnsi(string.Join(",", buffer));
}
DLL命令
.版本 2
.DLL命令 ByteFunc, 文本型, "Test"
.参数 bytes, 字节集
调用代码
.版本 2
.支持库 spec
调试输出 (ByteFunc ({ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }))
输出结果
1,2,3,4,5,6,7,8,9,10
示例中演示了如何接收来自易语言的字节集,并且将其格式化成字符串返回给易语言
回调
C#函数
[DllExport(CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
public static int CallBackFunc(IntPtr func)
{
Marshal.PtrToStringAnsi(func);
var callback = (callback)Marshal.GetDelegateForFunctionPointer(func, typeof(callback));
return callback(4);
}
public delegate int callback(int v);
DLL命令
.版本 2
.DLL命令 CallBackFunc, 整数型, "Test", "d"
.参数 func, 子程序指针
易语言传递的子程序
.版本 2
.子程序 test, 整数型
.参数 v, 整数型
返回 (v × 2)
调用代码
调试输出 (CallBackFunc (&test))
输出结果
8
示例中演示了如何调用易语言传递过来的子程序,并调用它返回结果给易语言
结语
应该挺简单的,大家看不懂就照抄就完事了。
失业几个月了,有C#相关的活欢迎骚扰,有问题要付费咨询也可以。
如果本篇教程对你有帮助欢迎打赏 精币 或者 交易币 ,白嫖也没问题,大家都是从白嫖走过来的~