Q823528082 发表于 2024-8-16 14:42

易语言求助

易语言用对象方法调用第三方dll,注册了dll后,创建对象时怎么获取这个dll的对象类型?

qq465881818 发表于 2024-8-16 19:09

在易语言中,使用对象方法调用第三方dll时,首先需要注册dll,然后创建对象并获取dll的对象类。以下是具体步骤:

注册dll:使用DllCall函数调用RegisterDll方法来注册dll。例如,假设你的dll文件名为MyDll.dll,可以使用以下代码进行注册:

DllCall("RegisterDll", "string", "MyDll.dll")
创建对象:使用CreateObject函数创建一个对象实例。例如,假设你的dll中有一个名为MyClass的类,可以使用以下代码创建一个对象实例:

obj := CreateObject("MyClass")
获取dll的对象类:在创建对象实例后,可以直接使用该对象实例调用dll中的方法和属性。例如,如果MyClass有一个名为MyMethod的方法,可以使用以下代码调用该方法:

obj.MyMethod()
注意:确保在调用dll之前已经正确注册了dll,否则将无法创建对象实例或调用dll中的方法。

Yifan2007 发表于 2024-8-16 20:29

他没帮助文档吗?你随便输入一个看他支不支持,不支持就整数形,字符串试呗,而且你调用dll要干嘛就是什么类型的啊

katelya 发表于 2024-8-16 21:40

用CreateObject方法创建对象,然后可以用 TypeOf 函数来获取对象的类型

cfnm123 发表于 2024-8-16 21:48

本帖最后由 cfnm123 于 2024-8-16 21:50 编辑

这问题可以丢给ai去解答了
在易语言中,如果你想要通过对象的方式调用第三方 DLL,并且这个 DLL 提供了一些 COM 对象或者你自己定义了某种形式的类来封装 DLL 的功能,你需要先了解该 DLL 是否支持 COM 接口或者其他可以创建对象的机制。

易语言本身并不直接支持面向对象的编程,但它可以通过一些方式间接地支持 COM 对象的使用。如果你想要创建一个第三方 DLL 中的对象,通常需要遵循以下步骤:

### 1. 注册 DLL

首先确保 DLL 已经被正确注册,如果它是 COM 组件的话,通常需要使用 `regsvr32` 命令进行注册。

### 2. 创建对象

创建对象的过程取决于 DLL 提供了什么类型的接口。如果是 COM 对象,你可以使用易语言的 `创建 COM 对象` 函数。

### 示例代码

假设你有一个名为 `MyLib.dll` 的 COM DLL,它提供了一个名为 `MyClass` 的 COM 类,你可以这样创建它的实例:

```e
.版本 2
.子程序 主程序
.局部变量 COMObj, COM 对象
COMObj = 创建 COM 对象 ("MyLib.MyClass")
.如果真 (COMObj ≠ 无)
    调用 COM 方法 (COMObj, "SomeMethod", , )
.否则
    提示框 ("无法创建 COM 对象。")
.如果真结束
```

在这个例子中,“MyLib.MyClass” 是你要创建的对象的 ProgID(Program Identifier),你需要从 DLL 的文档或使用工具如 `OLEVIEW` 查看具体的 ProgID。

### 3. 调用方法

一旦创建了对象,你可以使用 `调用 COM 方法` 来调用对象的方法,并使用 `读取 COM 属性` 和 `写入 COM 属性` 来访问对象的属性。

### 注意事项

- 如果 DLL 不是 COM 组件,而是普通的 DLL,那么你不能直接创建对象。你需要通过导入函数的方式来调用 DLL 中的函数。
- 如果 DLL 支持其他非 COM 的对象创建方式,你需要查阅该 DLL 的文档以了解如何创建对象。
- 易语言对于 COM 对象的支持有限,可能无法处理所有复杂的 COM 对象特性。

Q823528082 发表于 2024-8-17 08:50

qq465881818 发表于 2024-8-16 19:09
在易语言中,使用对象方法调用第三方dll时,首先需要注册dll,然后创建对象并获取dll的对象类。以下是具体 ...

obj := CreateObject("MyClass"),"MyClass"从哪获取?怎么获取DLL文件的CLSID?

Q823528082 发表于 2024-8-17 08:53

cfnm123 发表于 2024-8-16 21:48
这问题可以丢给ai去解答了
在易语言中,如果你想要通过对象的方式调用第三方 DLL,并且这个 DLL 提供 ...

“它提供了一个名为 MyClass 的 COM 类”,问题就在不知道它提供的com类是什么名称,只有一个DLL文件和函数,没有com类名。

Q823528082 发表于 2024-8-17 09:02

katelya 发表于 2024-8-16 21:40
用CreateObject方法创建对象,然后可以用 TypeOf 函数来获取对象的类型

用CreateObject方法创建对象,不知道类型名怎么创建对象?

Q823528082 发表于 2024-8-17 09:03

Console.WriteLine("S7.NET通信测试开始");
            objS7net = new Plc(CpuType.S71200, IpAddress, 0, 0);
            try
            {
                objS7net.Open();
                Console.WriteLine("S7.NET连接成功");
                sw.Restart();
                Count = 0;
                for (int i = 0; i < Times; i++)
                {
                  byte[] res = objS7net.ReadBytes(DataType.Memory, 0, 0, ReadLength);
                  if (res != null && res.Length == ReadLength)
                  {
                        Count++;
                  }
                  else
                  {
                        Console.WriteLine("S7.NET通信测试读取失败");
                  }
                }
                Console.WriteLine("S7.NET通信测试结束,耗时:" + (sw.ElapsedMilliseconds / Convert.ToSingle(Times)).ToString());
            }
            catch (Exception)
            {
                Console.WriteLine("S7.NET连接失败");
            }

上面是例程,方法我明白,现在不知道怎么创建‘new Plc’这个对象,因为不知道类型名。帮助文档只有函数说明。
页: [1]
查看完整版本: 易语言求助