原来Win10是可以使用大漠免费版的,看了一个视频后实践成功特别写篇文章记录下来。
首先需要用大漠类库生成工具生成各种语言调用时的类文件:
这个生成工具可以去大漠后台下载。
生成完成后得到这一系列文件夹,我们看C#文件夹,如下图:
把这个obj.cs文件添加进工程。
然后需要到大漠后台系统里下载一个最新的免注册dll文件:DmReg.dll
选中下图两个文件后,右键→复制。
然后到你的C#工程里,右键菜单中选择“粘贴”。
这两个文件就会粘贴进你的工程里。
然后点击dm.dll,在下方的属性窗口中找到“复制到输出目录”→“始终复制”
DmReg.dll 也按照dm.dll一样操作:
这个3.1233版本的大漠当然只能在x86也就是32位下运行,所以我们要设置一下工程的生成配置。
点击下图此处:
选择“配置管理器”
导入两个命名空间:
using System.Runtime.InteropServices;
using System.Diagnostics;
导入DmReg.dll内的入口函数并重写这个入口函数
[DllImport("DmReg.dll")]
public static extern int SetDllPathA(string path, int mode);
此参数的两个参数的作用分别如下:
参数1:dll的地址
参数2:com组件创建时的线程调用模式。
SetDllPathA 字符串(Ascii码表示插件所在的路径),整数(0表示STA,1表示MTA)
SetDllPathW 字符串(Unicode码表示插件所在的路径),整数(0表示STA,1表示MTA)
STA: Single-Thread Apartment, 中文叫单线程套间。就是在COM库初始化的时候创建一个内存结构,然后让它和调用CoInitialize的线程相关联。这个内存结构针对每个线程都会有一个。支持STA的COM对象只能在创建它的线程里被使用,其它线程如果再创建它就会失败。
MTA: Mutil-Thread Apartment,中文叫多线程套间。COM库在进程中创建一个内存结构,这个内存结构在整个进程中只能有一个,然后让它和调用CoInitializeEx的线程相关联。支持MTA的COM对象可以在任意线程里被使用。多有针对它的调用都会被封装成为消息。
其实STA和MTA是COM规定的一套线程模型,用于保障多线程情况下你的组件代码的同步。比如说有一个COM对象它内部有一个静态变量 gHello,那么这个对象无论生成多少实例对于gHello在内存中只能有一份,那么如果有两个不同的实例在两个线程里面同时去读写它,就有可能出错,所以就要就要有种机制进行同步保护,STA或者MTA就是这种机制。
然后创建一个按钮,在按钮回调函数里测试大漠是否能够成功调用:
private void button1_Click(object sender, EventArgs e)
{
var dm_ret = SetDllPathA("dm.dll", 1);
dmsoft dm= new dmsoft(); // 创建对象;
Console.WriteLine($"大漠版本:{dm.Ver()}");
dm.MoveTo(100,100);
}
调用成功移动了鼠标,没报错。
用这个方式调用不需要添加大漠到注册表。